From 4c70cae64b32e0162ec65aa3723bedf5881886bc Mon Sep 17 00:00:00 2001 From: Bryan Austin Date: Tue, 19 Jun 2018 11:24:50 -0700 Subject: [PATCH] Make use of multiple calendars in GCal module optional The change in PR #211 to make the GCal module use all calendars writable to the user is not desirable in all situations. At my organization, I have write access to calendars for conference rooms, for people's OOO events, etc. that fill my screen, obscuring the events on my own calendar. This change puts the behavior in that change behind a new config flag, `wtf.mods.gcal.multiCalendar`. It defaults to `false`, but feel free to change that if you think this is behavior that most users would want (I tend to default towards preserving existing behavior, in this case from before that change). --- gcal/client.go | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/gcal/client.go b/gcal/client.go index f5cf2cfb..4f100090 100644 --- a/gcal/client.go +++ b/gcal/client.go @@ -48,23 +48,7 @@ func Fetch() (*calendar.Events, error) { return nil, err } - // Get all user calendars with at the least writing access - pageToken := "" - var calendarIds []string - for { - calendarList, err := srv.CalendarList.List().ShowHidden(false).MinAccessRole("writer").PageToken(pageToken).Do() - for _, calendarListItem := range calendarList.Items { - calendarIds = append(calendarIds, calendarListItem.Id) - } - - pageToken = calendarList.NextPageToken - if err != nil || pageToken == "" { - break - } - } - if err != nil { - return nil, err - } + calendarIds, err := getCalendarIdList(srv) // Get calendar events var events calendar.Events @@ -179,3 +163,33 @@ func saveToken(file string, token *oauth2.Token) { json.NewEncoder(f).Encode(token) } + +func getCalendarIdList(srv *calendar.Service) ([]string, error) { + // Return single calendar if settings specify we should + if !wtf.Config.UBool("wtf.mods.gcal.multiCalendar", false) { + id, err := srv.CalendarList.Get("primary").Do() + if err != nil { + return nil, err + } + return []string{id.Id}, nil + } + + // Get all user calendars with at the least writing access + var calendarIds []string + var pageToken string + for { + calendarList, err := srv.CalendarList.List().ShowHidden(false).MinAccessRole("writer").PageToken(pageToken).Do() + if err != nil { + return nil, err + } + for _, calendarListItem := range calendarList.Items { + calendarIds = append(calendarIds, calendarListItem.Id) + } + + pageToken = calendarList.NextPageToken + if pageToken == "" { + break + } + } + return calendarIds, nil +}