changeset 81:79320eff10f2

support status=="cancelled" to delete events
author drewp@bigasterisk.com
date Fri, 06 Sep 2024 18:26:13 -0700
parents e8164bd2f9a1
children 0f0b15d8062c
files calsync/gcalclient/gcalclient.go calsync/gcalclient/listevents.go calsync/mongoclient/events_collection.go calsync/sync_event.go
diffstat 4 files changed, 20 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/calsync/gcalclient/gcalclient.go	Fri Sep 06 18:25:32 2024 -0700
+++ b/calsync/gcalclient/gcalclient.go	Fri Sep 06 18:26:13 2024 -0700
@@ -48,7 +48,6 @@
 }
 
 func (gc *GCalClient) Close() {
-	// todo: disconnect watches if possible
 }
 
 func (gc *GCalClient) AllCalendars() ([]*calendar.CalendarListEntry, error) {
--- a/calsync/gcalclient/listevents.go	Fri Sep 06 18:25:32 2024 -0700
+++ b/calsync/gcalclient/listevents.go	Fri Sep 06 18:26:13 2024 -0700
@@ -62,9 +62,6 @@
 		}
 
 		for _, ev := range pageResult.Items {
-			if ev.Status == "cancelled" {
-				log.Fatal("todo")
-			}
 			events = append(events, CalendarEvent{
 				Event:       ev,
 				CalendarUrl: cal.Url,
--- a/calsync/mongoclient/events_collection.go	Fri Sep 06 18:25:32 2024 -0700
+++ b/calsync/mongoclient/events_collection.go	Fri Sep 06 18:26:13 2024 -0700
@@ -20,6 +20,15 @@
 	return nil
 }
 
+func (c *MongoClient) DeleteEvent(evUrl string) error {
+	log.Println("deleting", evUrl)
+	_, err := c.eventsCollection.DeleteOne(c.ctx, bson.M{"_id": evUrl})
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
 func (c *MongoClient) DeleteEventsUpdatedBefore(cal M.MongoCal, t time.Time) error {
 	res, err := c.eventsCollection.DeleteMany(
 		c.ctx,
--- a/calsync/sync_event.go	Fri Sep 06 18:25:32 2024 -0700
+++ b/calsync/sync_event.go	Fri Sep 06 18:26:13 2024 -0700
@@ -125,7 +125,7 @@
 		return err
 	}
 	r.syncToken = nextSyncToken
-	err = r.upsertEvents(events)
+	err = r.upsertAndDeleteEvents(events)
 	if err != nil {
 		return err
 	}
@@ -139,16 +139,23 @@
 		return fmt.Errorf("ListEventUpdates: %v", err)
 	}
 	r.syncToken = nextSyncToken
-	err = r.upsertEvents(events)
+	err = r.upsertAndDeleteEvents(events)
 	if err != nil {
-		return fmt.Errorf("upsertEvents: %v", err)
+		return fmt.Errorf("upsertAndDeleteEvents: %v", err)
 	}
 
 	return nil
 }
 
-func (r *calEventsReader) upsertEvents(events []gcalclient.CalendarEvent) error {
+func (r *calEventsReader) upsertAndDeleteEvents(events []gcalclient.CalendarEvent) error {
 	for _, ev := range events {
+		if ev.Status == "cancelled" {
+			err := r.mc.DeleteEvent(ev.EventUrl)
+			if err != nil {
+				return err
+			}
+			continue
+		}
 		err := r.mc.UpsertOneEvent(convert.MongoEventFromGoogleEvent(&ev, time.Now() /*todo*/))
 		if err != nil {
 			return err