def update_remote_task(client, feed_uri, eid, task): event_uri = feed_uri + '/' + eid[-26:] event = client.get_calendar_entry(event_uri, desired_class=gdata.calendar.data.CalendarEventEntry) meta = task['meta'] start, end = process_datetime_from_timecode(task) event.title.text = task['description'] event.content.text = str(task['meta']) event.where[0].value = task['location'] event.when[0].start = start event.when[0].end = end event = client.Update(event) return event_to_json(event)
def update(client, feed_uri, local_tasklist, remote_tasklist, last_sync, time_offset): if len(local_tasklist) == 0 and last_sync is '': local_tasklist = remote_tasklist return local_tasklist elif len(remote_tasklist) == 0 and last_sync is '': remote_tasklist = create_remote_tasks(client, feed_uri, local_tasklist) local_tasklist = remote_tasklist return local_tasklist else: for i in range(0, len(local_tasklist)): task = local_tasklist[i] last_sync_time = string_to_time(last_sync) last_sync_time = last_sync_time - time_offset # local create if 'eid' not in task or last_sync_time is None: updated_task = create_remote_task(client, feed_uri, task) local_tasklist[i] = updated_task print "local create, sync at remote: ", task['description'] , ' created' else: eid = task['eid'] event = get_event_by_eid(remote_tasklist, eid) local_updated_time = string_to_time(task['edit']) - time_offset # remote delete if event is None and local_updated_time < last_sync_time: local_tasklist[i] = None print "remote delete, sync at local: ", task['description'], ' deleted' elif event is not None: remote_updated_time = string_to_time(event['edit']) # local or remote update if local_updated_time > last_sync_time or remote_updated_time > last_sync_time: if local_updated_time > remote_updated_time: local_tasklist[i] = update_remote_task(client, feed_uri, eid, task) print "local update, sync at remote: ", task['description'], ' updated' elif local_updated_time < remote_updated_time: local_tasklist[i] = event print "remote update, sync at local: ", task['description'], ' updated' for event in remote_tasklist: eid = event['eid'] remote_updated_time = string_to_time(event['edit']) local_task = get_event_by_eid(local_tasklist, eid) if local_task is None: last_sync_time = string_to_time(last_sync) # remote create if last_sync_time is None or remote_updated_time > last_sync_time: local_tasklist.append(event) print "remote create, sync at local: ", event['description'], ' created' # local detele else: event_uri = feed_uri + '/' + eid[-26:] event = client.get_calendar_entry(event_uri, desired_class=gdata.calendar.data.CalendarEventEntry) client.Delete(event) print "local delete, sync at remote: ", event['description'], ' deleted' local_tasklist = [t for t in local_tasklist if t is not None] return local_tasklist