chiark / gitweb /
store gcal_link in cache immediately (rather than waiting for next cache update
[gooswapper] / gooswapper.py
index f57318c9f6ddd8479335f5d03721749102128d53..b28e6a6b59b2e6111d311c1f6035858fe7d77384 100644 (file)
@@ -78,9 +78,6 @@ def ex_login(emailaddr,autodiscover=True):
 def get_ex_events(calendar):
     ans={}
     for event in calendar.all().only('changekey','item_id','gcal_link'):
-#        if event.gcal_link is not None:
-#            event.delete()
-#            continue
         if event.item_id in ans:
             logger.warning("Event item_id %s was duplicated!" % event.item_id)
         ans[event.item_id] = CachedExEvent(event.changekey,event.gcal_link)
@@ -117,14 +114,21 @@ def add_ex_to_gcal(ex_acct,
                 gevent["description"] = event.text_body
             if event.location is not None:
                 gevent["location"] = event.location
-            gevent["extended_properties"]={"shared": {"ex_id": event.item_id}}
+            gevent["extendedProperties"]={"shared": {"ex_id": event.item_id}}
             gevent=gcal_acct.events().insert(calendarId=gcal_id, body=gevent).execute()
             event.gcal_link = gevent.get("id")
             event.save()
-            events[event.item_id] = events[event.item_id]._replace(changekey=event.changekey)
+            events[event.item_id] = events[event.item_id]._replace(changekey=event.changekey,gcal_link=event.gcal_link)
         else:
             logger.warning("only all-day events supported")
-            
+
+def del_ex_to_gcal(ex_acct, gcal_acct, events, deleted, gcal_id="primary"):
+    for ev_id in deleted:
+        if events[ev_id].gcal_link is not None:
+            gcal_acct.events().delete(calendarId=gcal_id,
+                                      eventId=events[ev_id].gcal_link,
+                                      sendUpdates="none").execute()
+    
 def get_gcal_cred():
     #each such file can only store a single credential
     storage = oauth2client.file.Storage(gcal_authpath)
@@ -165,6 +169,9 @@ def main():
     if cache is not None:
         added,deleted,changed = ex_event_changes(cache,current)
         add_ex_to_gcal(ex_account,gcal_account,gcal_tz,current,added)
+        #delete op needs the "cache" set, as that has the link ids in
+        #for events that are now deleted
+        del_ex_to_gcal(ex_account,gcal_account,cache,deleted)
         
     with open(cachepath,"wb") as f:
         pickle.dump(current,f)