# HG changeset patch # User Matti Hamalainen # Date 1468234314 -10800 # Node ID 6e38692e341fc21ea1d741637281cae55037a912 # Parent 4891ed8d77d51ae49d5a5f9439a52a6f2712a847 Fixes to event merging etc. diff -r 4891ed8d77d5 -r 6e38692e341f multimerge.py --- 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.")