Mercurial > code > home > repos > gcalendarwatch
diff calsync/gcalclient/gcalclient.go @ 51:a9b720445bcf
now roughly syncs cals and events to mongodb, one time
author | drewp@bigasterisk.com |
---|---|
date | Mon, 19 Aug 2024 14:42:27 -0700 |
parents | 2991c1166852 |
children | 5f7c393577e9 |
line wrap: on
line diff
--- a/calsync/gcalclient/gcalclient.go Mon Aug 19 13:37:05 2024 -0700 +++ b/calsync/gcalclient/gcalclient.go Mon Aug 19 14:42:27 2024 -0700 @@ -4,8 +4,10 @@ "context" "log" "net/url" + "strings" "time" + "bigasterisk.com/go/gcalendarwatch/mongoclient" "google.golang.org/api/calendar/v3" ) @@ -14,16 +16,25 @@ srv *calendar.Service } -// Same as calendar.Event, but includes the source calendar url +// Same as calendar.Event, but includes our urls type CalendarEvent struct { *calendar.Event CalendarUrl string + EventUrl string } func MakeCalUrl(calId string) string { return "http://bigasterisk.com/calendar/" + url.QueryEscape(calId) } +func MakeEventUrl(calUrl string, evId string) string { + return calUrl + "/" + url.QueryEscape(evId) +} + +func MakeEventUrl3(googleCalId string, evId string) string { + return MakeEventUrl("http://bigasterisk.com/calendar/"+ + url.QueryEscape(googleCalId), evId) +} func New(ctx context.Context) (*GCalClient, error) { // If modifying these scopes, delete your previously saved token.json. err, srv := newService(ctx) @@ -37,9 +48,9 @@ // todo: disconnect watches if possible } -func (gc *GCalClient) AllCalendars() ([]*calendar.CalendarListEntry, error) { +func (gc *GCalClient) AllCalendars(maxResults int64) ([]*calendar.CalendarListEntry, error) { // todo: pagination - list, err := gc.srv.CalendarList.List().MaxResults(100).Do() + list, err := gc.srv.CalendarList.List().MaxResults(maxResults).Do() if err != nil { return nil, err } @@ -48,31 +59,32 @@ } // FindEvents considers all calendars -func (gc *GCalClient) FindEvents(s time.Time) ([]*CalendarEvent, error) { - cals, err := gc.AllCalendars() +func (gc *GCalClient) FindEvents(mc *mongoclient.MongoClient, s time.Time, maxEventsPerCalendar int64) ([]*CalendarEvent, error) { + cals, err := mc.GetAllCals() if err != nil { return nil, err } - + log.Println("reading", len(cals), "calendars") ret := make([]*CalendarEvent, 0) for _, cal := range cals { - calUrl := MakeCalUrl(cal.Id) - log.Println(" getting events from ", calUrl) - list, err := gc.srv. - Events.List(cal.Id). - ShowDeleted(false). + calUrl := cal.Url + events, err := gc.srv. + Events.List(cal.GoogleId). + ShowDeleted(false). SingleEvents(true). TimeMin(s.Format(time.RFC3339)). - MaxResults(2). + MaxResults(maxEventsPerCalendar). OrderBy("startTime"). Do() - if err != nil { - return nil, err - } - for _, event := range list.Items { + if err != nil { + return nil, err + } + log.Println(len(events.Items), "events from", calUrl) + for _, event := range events.Items { ev := &CalendarEvent{ Event: event, CalendarUrl: calUrl, + EventUrl: MakeEventUrl(calUrl, event.Id), } ret = append(ret, ev) }