changeset 53:ea62e0ed05ae

Initial implementation of event comparision amd generally more clever about when to update events in target calendar. This makes subsequent updates faster when nothing has changed.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 05 Jul 2016 20:55:18 +0300
parents b87dbc887f63
children 86d3a8eddbd7
files multimerge.py
diffstat 1 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/multimerge.py	Tue Jul 05 19:26:42 2016 +0300
+++ b/multimerge.py	Tue Jul 05 20:55:18 2016 +0300
@@ -114,6 +114,23 @@
     return events
 
 
+## Find event by its gcm_id from given list or return None if not found
+def gcm_get_event_by_gcm_id(list, id):
+    for event in list:
+        if event["gcm_id"] == id:
+            return event
+    return None
+
+
+gcm_no_compare_fields = [u"id", u"iCalUID"]
+
+def gcm_compare_events(ev1, ev2):
+    for field in ev1:
+        if not field in gcm_no_compare_fields and ev1[field] != ev2[field]:
+            return False
+    return True
+
+
 ##
 ## Class for handling configuration / settings
 ##
@@ -440,9 +457,8 @@
         ## Yes. Thus, we just update the event.
         #print "IS in dst_gcm_ids: "+ event["id"] +" : "+ event["gcm_id"]
         # Check if event NEEDS updating .. aka compare data
-        #d_event = gcm_get_event_by_gcm_id(dst_events, event["gcm_id"])
-        #if d_event and gcm_compare_events(event, d_event):
-        if True:
+        d_event = gcm_get_event_by_gcm_id(dst_events, event["gcm_id"])
+        if d_event and gcm_compare_events(event, d_event):
             try:
                 new_event = service.events().update(calendarId=cfg.dest_id, eventId=event["id"], body=event).execute()
             except Exception as e: