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)
 		}