# HG changeset patch # User Matti Hamalainen # Date 1467741318 -10800 # Node ID ea62e0ed05ae1aa1227effbc3193caf59c0803e1 # Parent b87dbc887f63e0885cde695c4470ef2fa62a6d25 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. diff -r b87dbc887f63 -r ea62e0ed05ae multimerge.py --- 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: