From: Vincent Le Gallic Date: Mon, 8 Apr 2013 01:19:41 +0000 (+0200) Subject: sync côté serveur X-Git-Url: http://gitweb.pimeys.fr/?p=today.git;a=commitdiff_plain;h=e7197d308fd7eaf67d0d4d0ae0211091474eb8a8 sync côté serveur --- diff --git a/.gitignore b/.gitignore index 3c0814d..ecab017 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,11 @@ *.pyc lasts lasts_sync +lasts_published birthdays.txt timers.txt saints.txt .lasttime .something +lasts_sync diff --git a/today-server.py b/today-server.py index 9117507..4938500 100755 --- a/today-server.py +++ b/today-server.py @@ -21,7 +21,10 @@ sys.path.append("/home/vincent/scripts/dtc/") import dtc #: Fichier où sont stockés les derniers IDs des trucs -store_file = "lasts_published" +store_published_file = "lasts_published" + +#: Fichier où est stockée une copie de la liste des derniers IDs *lus* +store_seen_file = "lasts_sync" def get_now(): """Obtenir la date actuelle sous le bon format""" @@ -44,14 +47,14 @@ def last_xkcd(): def get_file(): """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers.""" - f = open(store_file) + f = open(store_published_file) news = json.load(f) f.close() return news def update_file(news): """Met à jour la liste des derniers ids dans le fichier.""" - f = open(store_file, 'w') + f = open(store_published_file, 'w') json.dump(news, f) f.close() @@ -62,10 +65,30 @@ def fetch_all(): news["dtc"] = last_dtc() return news +def sync(): + """Reçoit une requête de synchronisation.""" + # On récupère où en est le client sur stdin + t = sys.stdin.read() + on_client = json.loads(t) + # On récupère où en est le serveur dans le fichier idoine + if os.path.isfile(store_seen_file): + on_server = json.load(open(store_seen_file)) + else: + on_server = {} + # On garde le maximum + for k in set(on_client.keys() + on_server.keys()): + on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0)) + # On enregistre ce nouveau dico + json.dump(on_server, open(store_seen_file, "w")) + # On envoie au client ce nouveau dico + print json.dumps(on_server) + if __name__ == "__main__": if sys.argv[1] == "check": news = fetch_all() update_file(news) - if sys.argv[1] == "whatsup": + elif sys.argv[1] == "whatsup": news = get_file() print json.dumps(news) + elif sys.argv[1] == "sync": + sync()