]> gitweb.pimeys.fr Git - today.git/commitdiff
sync côté serveur
authorVincent Le Gallic <legallic@crans.org>
Mon, 8 Apr 2013 01:19:41 +0000 (03:19 +0200)
committerVincent Le Gallic <legallic@crans.org>
Mon, 8 Apr 2013 01:19:41 +0000 (03:19 +0200)
.gitignore
today-server.py

index 3c0814de062e23db6f7ba5023b66f4c7cd02f313..ecab017b48efaab4a7974d9da0133f4cc721b976 100644 (file)
@@ -1,9 +1,11 @@
 *.pyc
 lasts
 lasts_sync
+lasts_published
 birthdays.txt
 timers.txt
 saints.txt
 .lasttime
 .something
 
+lasts_sync
index 91175076e67a0d0def519b9859c20c9275e201a9..4938500488a200968e0841f3b3bb09e052e47e93 100755 (executable)
@@ -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()