changeset 110:c6771a596d77

Add gcm_fetch_events() function that properly implements chained event list fetching.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 18 Oct 2016 12:29:13 +0300
parents 8cf20367a372
children 8b773358ad47
files multimerge.py
diffstat 1 files changed, 25 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/multimerge.py	Tue Oct 18 12:25:33 2016 +0300
+++ b/multimerge.py	Tue Oct 18 12:29:13 2016 +0300
@@ -160,6 +160,29 @@
     return True
 
 
+## Fetch events for given calendar
+def gcm_fetch_events(calendarId, showDeleted):
+    events = []
+    ev_token = None
+    while True:
+        try:
+            result = service.events().list(
+                calendarId=calendarId,
+                showDeleted=showDeleted,
+                singleEvents=False,
+                pageToken=ev_token,
+                ).execute()
+        except Exception as e:
+            gcm_fatal(u"Failed to fetch calendar events for {0}:\n\nERROR: {1}\n".format(calendarId, str(e)))
+
+        events.extend(result.get("items", []))
+        ev_token = result.get("nextPageToken")
+        if not ev_token:
+            break
+
+    return events
+
+
 ###
 ### Class for parsing and manipulating RGB colors
 ###
@@ -527,17 +550,6 @@
 src_events = []
 for calendar in src_calendars:
     gcm_debug(4, u"- {0} ({1})".format(calendar["id"], calendar["summary"]))
-    try:
-        result = service.events().list(
-            timeZone="EEST",
-            calendarId=calendar["id"],
-            singleEvents=False,
-            showDeleted=False,
-#            orderBy="startTime",
-            ).execute()
-    except Exception as e:
-        gcm_fatal(u"Failed to fetch calendar events for {0}:\n\n{1}\n\nERROR: {2}\n".format(calendar["id"], calendar, str(e)))
-
     c_found = None
     if "colorId" in calendar and calendar["colorId"] in colors["calendar"]:
         gcm_debug(4, u"  Calendar color: {0}".format(colors["calendar"][calendar["colorId"]]))
@@ -548,7 +560,7 @@
             gcm_debug(4, u"  No matching event color found!")
 
     # Add events, if any, to main list
-    events = gcm_generate_ids(result.get("items", []), calendar["id"], "___")
+    events = gcm_generate_ids(gcm_fetch_events(calendar["id"], False), calendar["id"], "___")
     if events:
         for event in events:
             if event["status"] != u"cancelled":
@@ -562,13 +574,7 @@
 
 ## Get current events
 gcm_debug(3, u"Fetching current target calendar events.")
-result = service.events().list(
-    calendarId=cfg.dst_id,
-    singleEvents=False,
-    showDeleted=True,
-    ).execute()
-
-dst_events = gcm_generate_ids(result.get("items", []), "", "")
+dst_events = gcm_generate_ids(gcm_fetch_events(cfg.dst_id, True), "", "")
 gcm_debug(3, u"Found {0} event(s).".format(len(dst_events)))