Mercurial > code > home > repos > gcalendarwatch
view 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 source
package gcalclient import ( "context" "log" "net/url" "strings" "time" "bigasterisk.com/go/gcalendarwatch/mongoclient" "google.golang.org/api/calendar/v3" ) type GCalClient struct { ctx context.Context srv *calendar.Service } // 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) if err != nil { log.Fatalf("Unable to retrieve Calendar client: %v", err) } return &GCalClient{ctx, srv}, nil } func (gc *GCalClient) Close() { // todo: disconnect watches if possible } func (gc *GCalClient) AllCalendars(maxResults int64) ([]*calendar.CalendarListEntry, error) { // todo: pagination list, err := gc.srv.CalendarList.List().MaxResults(maxResults).Do() if err != nil { return nil, err } list.Items = list.Items[:4] return list.Items, nil } // FindEvents considers all calendars 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 := cal.Url events, err := gc.srv. Events.List(cal.GoogleId). ShowDeleted(false). SingleEvents(true). TimeMin(s.Format(time.RFC3339)). MaxResults(maxEventsPerCalendar). OrderBy("startTime"). Do() 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) } } return ret, nil }