-#!/usr/bin/python
-# -*- encoding: utf-8 -*-
-
-""" Codé par 20-100
-script qui affiche des trucs à penser, des J-n des conneries
-or that kind of stuff.
-
-Partie serveur, prévue pour chercher périodiquement les trucs non lus
-et répondre à un check.
-
-"""
-
-import time, datetime
-import re
-import os
-import sys
-import urllib
-import json
-os.chdir('/home/vincent/scripts/today/')
-sys.path.append("/home/vincent/scripts/dtc/")
-import dtc
-
-#: Fichier où sont stockés les derniers IDs des trucs
-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"""
- timestamp = time.time()
- now = datetime.datetime(*time.localtime(timestamp)[:7])
- return now
-
-def last_dtc():
- """Vérifie si il y a des quotes DTC non lues"""
- return dtc.last_inserted()
-
-def last_xkcd():
- try:
- p = urllib.urlopen("http://xkcd.com")
- except IOError:
- return "Impossible de se connecter à xkcd"
- t = p.read()
- current_id = int(re.findall("Permanent link to this comic: http://xkcd.com/(.*?)/", t)[0])
- return current_id
-
-def get_file():
- """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers."""
- 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_published_file, 'w')
- json.dump(news, f)
- f.close()
-
-def fetch_all():
- """Va chercher sur les différents sites les nouveaux trucs."""
- news = {}
- news["xkcd"] = last_xkcd()
- 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)
- elif sys.argv[1] == "whatsup":
- news = get_file()
- print json.dumps(news)
- elif sys.argv[1] == "sync":
- sync()