changeset 63:6e38692e341f

Fixes to event merging etc.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 11 Jul 2016 13:51:54 +0300
parents 4891ed8d77d5
children c4b8d934d7ab
files multimerge.py
diffstat 1 files changed, 20 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/multimerge.py	Mon Jul 11 13:37:26 2016 +0300
+++ b/multimerge.py	Mon Jul 11 13:51:54 2016 +0300
@@ -106,13 +106,13 @@
 
 
 ## Generate gcm IDs for given list of events
-def gcm_generate_ids(events, calendar_id):
+def gcm_generate_ids(events, calendar_id, sep):
     if not events:
         return events
 
     for ev in events:
         ev["gcm_cal_id"] = calendar_id
-        ev["gcm_id"] = re.sub("[^a-v0-9]", "0", calendar_id.lower()) + ev["id"]
+        ev["gcm_id"] = calendar_id + sep + ev["iCalUID"]
 
     return events
 
@@ -133,6 +133,7 @@
             return False
     return True
 
+
 class GCMColor():
     def __init__(self, src = None):
         if src == None:
@@ -495,7 +496,7 @@
             gcm_debug("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(result.get("items", []), calendar["id"], "___")
     if events:
         for event in events:
             if c_found != None:
@@ -514,11 +515,10 @@
     showDeleted=True,
     ).execute()
 
-dst_events = gcm_generate_ids(result.get("items", []), "")
+dst_events = gcm_generate_ids(result.get("items", []), "", "")
 gcm_debug(u"Found {0} event(s).".format(len(dst_events)))
 
 
-
 ## Start merging events ..
 gcm_debug(u"Re-merging events to target calendar ..")
 dst_ids = frozenset(map(lambda x: x["gcm_id"], dst_events))
@@ -528,27 +528,30 @@
     # Does the event exist already in the target?
     if event["gcm_id"] in dst_ids:
         # Check if event NEEDS updating .. aka compare data
-        gcm_debug(u"Event {0} exists, checking ..".format(event["gcm_id"]))
+        gcm_debug(u"Event {0} : {1} exists, checking ..".format(event["id"], event["gcm_id"]))
         d_event = gcm_get_event_by_gcm_id(dst_events, event["gcm_id"])
         if not gcm_compare_events(event, d_event):
             # Seems we need to update
-            gcm_debug(u"Updating event {0} ..".format(event["gcm_id"]))
+            gcm_debug(u"Updating event {0} : {1}..".format(event["id"], event["gcm_id"]))
             try:
                 event.pop("sequence", None)
-                new_event = service.events().update(calendarId=cfg.dest_id, eventId=event["id"], body=event).execute()
+                event.pop("id", None)
+                event["iCalUID"] = event["gcm_id"]
+                new_event = service.events().update(calendarId=cfg.dest_id, eventId=d_event["id"], body=event).execute()
             except Exception as e:
-                gcm_fatal("Failed to update event:\n{0}\n\nERROR: {1}\n".format(event, str(e)))
+                gcm_fatal("Failed to update event {0}:\n\n{1}\n\nERROR: {2}\n".format(event["gcm_id"], event, str(e)))
         else:
-            gcm_debug(u"No need to update event {0}.".format(event["gcm_id"]))
+            gcm_debug(u"No need to update event {0} : {1}.".format(event["id"], event["gcm_id"]))
     else:
         ## Event does not seem to exist. Insert new event.
         gcm_debug(u"Inserting new event {0}".format(event["gcm_id"]))
-        event.pop("iCalUID", None)        # Remove the iCalUID, having it conflicts with event ID
-        event["id"] = event["gcm_id"]     # Replace Google generated ID with our own
+        event.pop("id", None)
+        event["iCalUID"] = event["gcm_id"]     # Replace Google generated ID with our own
         try:
             new_event = service.events().insert(calendarId=cfg.dest_id, body=event).execute()
         except Exception as e:
-            gcm_fatal("Failed to insert new event:\n{0}\n\nERROR: {1}\n".format(event, str(e)))
+            gcm_fatal("Failed to insert new event:\n\n{0}\n\nERROR: {1}\n".format(event, str(e)))
+
 
 ## Remove "stale" events
 gcm_debug(u"Purging stale events ..")
@@ -556,10 +559,10 @@
     gcm_debug(u"Checking event {0}".format(event["gcm_id"]))
     if not event["gcm_id"] in src_ids and event["status"] != u"cancelled":
         gcm_debug(u"Deleting event {0}".format(event["gcm_id"]))
-#        try:
-#            service.events().delete(calendarId=cfg.dest_id, eventId=event["id"]).execute()
-#        except Exception as e:
-#            gcm_fatal("Failed to delete stale event:\n{0}\n\nERROR: {1}\n".format(event, str(e)))
+        try:
+            service.events().delete(calendarId=cfg.dest_id, eventId=event["id"]).execute()
+        except Exception as e:
+            gcm_fatal("Failed to delete stale event:\n{0}\n\nERROR: {1}\n".format(event, str(e)))
 
 
 gcm_debug(u"Finished.")