Mercurial > code > home > repos > gcalendarwatch
view calsync/gcalclient/gcalclient.go @ 70:06f3aa9d461c
page size
author | drewp@bigasterisk.com |
---|---|
date | Fri, 06 Sep 2024 17:30:27 -0700 |
parents | 8aee4f5c4bdd |
children | 0f09464d4974 |
line wrap: on
line source
package gcalclient /* Note: this module keeps gcal *paging* private (we fetch all the pages), but *sync* is public. At least, callers may receive a syncToken and have to pass it back in. */ import ( "context" "crypto/md5" "fmt" "log" "net/url" "strings" "time" "bigasterisk.com/go/gcalendarwatch/mongoclienttypes" "google.golang.org/api/calendar/v3" ) const urlBase = "http://bigasterisk.com/calendar/" 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 urlBase + url.QueryEscape(calId) } func MakeEventUrl(calUrl string, evId string) string { return calUrl + "/" + url.QueryEscape(evId) } func New(ctx context.Context) (*GCalClient, error) { srv, err := 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() ([]*calendar.CalendarListEntry, error) { // todo: pagination list, err := gc.srv.CalendarList.List().MaxResults( /*maxResults*/ 100).Do() if err != nil { return nil, err } // todo: do not submit // debugFilterCals(list) return list.Items, nil } func debugFilterCals(list *calendar.CalendarList) { log.Println("filtering cal list") ret := make([]*calendar.CalendarListEntry, 0) for _, cal := range list.Items { if strings.Contains(cal.Id, "drewp") || strings.Contains(cal.Id, "ast") { ret = append(ret, cal) } } list.Items = ret } func shortDebugHash(pageToken string) string { if pageToken == "" { return "(empty)" } return fmt.Sprintf("%x", md5.Sum([]byte(pageToken))) } func (gc *GCalClient) WatchEvents(cal *mongoclienttypes.MongoCal, watchId string, expire time.Duration) error { _, err := watchEventsCall(gc.srv, cal.GoogleId, expire, watchId).Do() return err }