From 80c0ed47d3c5abd07d25e48dcc441db6c08af152 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 28 Jan 2024 05:02:51 -0600 Subject: [PATCH] Setup Rrule helper methods for MeetingTimeResponse --- types.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/types.go b/types.go index 4cfb33f..65c5889 100644 --- a/types.go +++ b/types.go @@ -3,6 +3,7 @@ package main import ( "fmt" "strconv" + "strings" "time" log "github.com/rs/zerolog/log" @@ -113,6 +114,32 @@ func (m *MeetingTimeResponse) Days() map[time.Weekday]bool { return days } +// Returns the BYDAY value for the iCalendar RRule format +func (m *MeetingTimeResponse) ByDay() string { + sb := strings.Builder{} + + if m.MeetingTime.Sunday { + sb.WriteString("SU,") + } + if m.MeetingTime.Monday { + sb.WriteString("MO,") + } + if m.MeetingTime.Tuesday { + sb.WriteString("TU,") + } + if m.MeetingTime.Wednesday { + sb.WriteString("WE,") + } + if m.MeetingTime.Thursday { + sb.WriteString("TH,") + } + if m.MeetingTime.Friday { + sb.WriteString("FR") + } + + return sb.String() +} + const layout = "01/02/2006" // StartDay returns the start date of the meeting time as a time.Time object @@ -167,6 +194,17 @@ func (m *MeetingTimeResponse) EndTime() *NaiveTime { return ParseNaiveTime(value) } +// Converts the meeting time to a string that satisfies the iCalendar RRule format +func (m *MeetingTimeResponse) RRule() string { + sb := strings.Builder{} + + sb.WriteString("FREQ=WEEKLY;") + sb.WriteString(fmt.Sprintf("UNTIL=%s;", m.EndDay().Format("20060102"))) + sb.WriteString(fmt.Sprintf("BYDAY=%s;", m.ByDay())) + + return sb.String() +} + type SearchResult struct { Success bool `json:"success"` TotalCount int `json:"totalCount"`