示例#1
0
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)
示例#2
0
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