From e7197d308fd7eaf67d0d4d0ae0211091474eb8a8 Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Mon, 8 Apr 2013 03:19:41 +0200 Subject: [PATCH] =?utf8?q?sync=20c=C3=B4t=C3=A9=20serveur?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ today-server.py | 31 +++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) 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() -- 2.39.2