annotate calsync/gcalclient/gcalclient.go @ 73:50ddf6a48816

gcalclient should return errors, not exit
author drewp@bigasterisk.com
date Fri, 06 Sep 2024 17:33:08 -0700
parents 0f09464d4974
children 30ad34850ef1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
1 package gcalclient
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
2
56
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
3 /*
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
4 Note: this module keeps gcal *paging* private (we fetch all the pages), but
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
5 *sync* is public. At least, callers may receive a syncToken and have to pass it
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
6 back in.
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
7 */
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
8 import (
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
9 "context"
56
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
10 "crypto/md5"
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
11 "fmt"
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
12 "net/url"
61
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
13 "time"
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
14
61
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
15 "bigasterisk.com/go/gcalendarwatch/mongoclienttypes"
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
16 "google.golang.org/api/calendar/v3"
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
17 )
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
18
54
3a12a3ac9164 refactor. run 30s forever. doesn't work on 2+ cals
drewp@bigasterisk.com
parents: 53
diff changeset
19 const urlBase = "http://bigasterisk.com/calendar/"
3a12a3ac9164 refactor. run 30s forever. doesn't work on 2+ cals
drewp@bigasterisk.com
parents: 53
diff changeset
20
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
21 type GCalClient struct {
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
22 ctx context.Context
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
23 srv *calendar.Service
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
24 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
25
51
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
26 // Same as calendar.Event, but includes our urls
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
27 type CalendarEvent struct {
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
28 *calendar.Event
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
29 CalendarUrl string
51
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
30 EventUrl string
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
31 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
32
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
33 func MakeCalUrl(calId string) string {
54
3a12a3ac9164 refactor. run 30s forever. doesn't work on 2+ cals
drewp@bigasterisk.com
parents: 53
diff changeset
34 return urlBase + url.QueryEscape(calId)
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
35 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
36
51
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
37 func MakeEventUrl(calUrl string, evId string) string {
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
38 return calUrl + "/" + url.QueryEscape(evId)
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
39 }
a9b720445bcf now roughly syncs cals and events to mongodb, one time
drewp@bigasterisk.com
parents: 49
diff changeset
40
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
41 func New(ctx context.Context) (*GCalClient, error) {
58
6c7151126a0b logging and refactor
drewp@bigasterisk.com
parents: 57
diff changeset
42 srv, err := newService(ctx)
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
43 if err != nil {
73
50ddf6a48816 gcalclient should return errors, not exit
drewp@bigasterisk.com
parents: 71
diff changeset
44 return nil, err
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
45 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
46 return &GCalClient{ctx, srv}, nil
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
47 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
48
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
49 func (gc *GCalClient) Close() {
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
50 // todo: disconnect watches if possible
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
51 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
52
56
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
53 func (gc *GCalClient) AllCalendars() ([]*calendar.CalendarListEntry, error) {
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
54 // todo: pagination
56
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
55 list, err := gc.srv.CalendarList.List().MaxResults( /*maxResults*/ 100).Do()
49
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
56 if err != nil {
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
57 return nil, err
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
58 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
59 return list.Items, nil
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
60 }
2991c1166852 start calsync in go. Calendar list seems to sync
drewp@bigasterisk.com
parents:
diff changeset
61
56
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
62 func shortDebugHash(pageToken string) string {
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
63 if pageToken == "" {
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
64 return "(empty)"
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
65 }
635ff76f867c WIP: rewrite: process load+sync in parallel between cals; simplify a lot
drewp@bigasterisk.com
parents: 55
diff changeset
66 return fmt.Sprintf("%x", md5.Sum([]byte(pageToken)))
52
5f7c393577e9 now gets sync updates (for 30 sec)
drewp@bigasterisk.com
parents: 51
diff changeset
67 }
61
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
68
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
69 func (gc *GCalClient) WatchEvents(cal *mongoclienttypes.MongoCal, watchId string, expire time.Duration) error {
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
70 _, err := watchEventsCall(gc.srv, cal.GoogleId, expire, watchId).Do()
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
71 return err
8aee4f5c4bdd receive notifications and route them to calendar sync functions
drewp@bigasterisk.com
parents: 60
diff changeset
72 }