Example #1
0
File: sync.py Project: tekacs/gn
def sync(user, password, since=None, localdb=None):
    db = Database(localdb)
    api = Simplenote(user, password)
    dbg("LOCAL TO REMOTE:")
    synced_count = 0
    for note in db.values():
        if note["CHANGED"]:
            if not note.has_key("key") or note["key"].startswith(KEY_PREFIX):
                dbg("NEW NOTE")
            else:
                dbg("CHANGED: %s" % note["key"])
            if note["key"].startswith(KEY_PREFIX):
                k = note["key"]
                del note["key"]
            else:
                k = None
            note = api.update(note)
            note["CHANGED"] = False
            db.update(note)
            if k is not None:
                db.remove(k)
            synced_count += 1
    if since:
        rindex = api.index(since=since)
        dbg(">>>> SINCE: %s" % since)
    else:
        rindex = api.index()
    dbg("REMOTE TO LOCAL:")
    dbg(">>>> RINDEX LEN: %s" % len(rindex))
    for ritem in rindex:
        key = ritem["key"]
        if key not in db.keys(deleted=True):
            dbg("  NEW: %s" % (key))
            db.update(api.get(key))
            synced_count += 1
        litem = db.get(key)
        if ritem["syncnum"] > litem["syncnum"]:
            dbg("  UPD: %s" % (key))
            db.update(api.get(key))
            synced_count += 1
    dbg("CLEAN UP:")
    if since is None:
        rkeys = api.keys().keys()
        for k in db.keys(deleted=True):
            if k not in rkeys:
                dbg("  DEL: %s" % k)
                db.remove(k)
                synced_count += 1
    else:
        for k in db.keys(deleted=True):
            litem = db.get(k)
            if litem["deleted"] != 0:
                dbg("  DEL: %s" % k)
                db.remove(k)
    sys.stderr.write("Synced %s notes.\n" % synced_count)
    return time.time()