From: Juke Date: Wed, 17 Mar 2010 11:35:25 +0000 (+0100) Subject: maj X-Git-Url: http://git.maemo.org/git/?p=masstransit;a=commitdiff_plain;ds=sidebyside maj --- diff --git a/TODO b/TODO index dde4ff9..ce4b411 100644 --- a/TODO +++ b/TODO @@ -1,44 +1,57 @@ TODO : Intercepter les erreurs de Transilien.fr -TODO : Intercepter les erreurs Reseaux -TODO : Integrer python-conix + + TODO : Faire un widget sur le bureau TODO : Integrer les bus RATP TODO : Integrer les prochains passage à une gare toute destination confondues -TODO : Avoir la liste complete des gares dans un fichier TODO : Ecrire un parser python pour avoir la liste complete des gares. TODO : Afficher les horaires de passage aux differentes stations intermediaire. TODO : Integrer les RER RATP TODO : Sauvegarder les derniers choix TODO : Gerer l'autocompletion des champs -TODO : Faire un bouton Retour TODO : Possibilité de bookmarker des trajets -TODO : Faire un .deb TODO : Trouver une icone -TODO : Remplacer liste des gares par un assesseur -TODO : Remplacer get_liste_train par un assesseur -TODO : Remplacer get_liste_horaire par un assesseur -TODO : Remplacer get_list_ligne_horaire par un assesseur -TODO : Trier les gares par ordre alphabetique -TODO : Intercepter les entrées vides TODO : ajouter les argument à l'url avec httplib -TODO : ajouter les quais -TODO : ajouter les terminus -TODO : enlever les print de debug -TODO : corriger les noms des variables TODO : corriger la taille des lignes TODO : Fusionner liste horaire et liste train TODO : etre ok sur pylint -TODO : faire des try sur les import -TODO : documenter les classes TODO : Ajouter les signatures au paquet TODO : Faire passer le paquet dans testing +TODO : Faire une methode get_combo_source +TODO : essayer de supprimer curseur_horaire +TODO : faire une interface QT +TODO : faire une interface texte +TODO : Mettre le changelog dans les paquets +TODO : DIVISE refresh_treestore en parse et affiche +TODO : ne tenter de se connecter que si il est deco + +ABANDONNE : remplacer les horizontal box par GtkHButtonBox -> mauvais rendu + + -DONE 0.1.1 : Modélisation Objet -DONE 0.1.2 : Corriger l'indentation -DONE 0.1.3 : Faire un objet ListeHoraire -DONE 0.1.4 : Faire un .deb -DONE 0.1.5 : transformer example.cfg en masstransit.cfg -DONE 0.1.6 : mettre les chemin par rapport à /opt/masstransit/ -DONE 0.7.1 : correction d'un bug de chemin + changement numerotation -DONE 0.8.0 : corriger le deb (lanceur + chmod) -DONE 0.8.1 : ajouter Gpodder en dependance +DONE 0.1.1 : Modélisation Objet +DONE 0.1.2 : Corriger l'indentation +DONE 0.1.3 : Faire un objet ListeHoraire +DONE 0.1.4 : Faire un .deb +DONE 0.1.5 : transformer example.cfg en masstransit.cfg +DONE 0.1.6 : mettre les chemin par rapport à /opt/masstransit/ +DONE 0.7.1 : correction d'un bug de chemin + changement numerotation +DONE 0.8.0 : corriger le deb (lanceur + chmod) +DONE 0.8.1 : ajouter Gpodder en dependance +DONE 0.9.0 : Avoir la liste complete des gares dans un fichier +DONE 0.10.0 : Trier les gares par ordre alphabetique +DONE 0.11.0 : Remplacer get_list_ligne_horaire par un assesseur +DONE 0.12.0 : enlever les print de debug +DONE 0.13.0 : corriger les noms des variables +DONE 0.14.0 : faire des try sur les import +DONE 0.15.0 : documenter les classes +DONE 0.16.0 : Faire une methode list_ligne_horaire_to_treestore +DONE 0.17.0 : Intercepter les entrées vides +DONE 0.18.0 : ajouter les quais +DONE 0.19.0 : ajouter les terminus +DONE 0.19.1 : enlever les print de debug +DONE 0.20.0 : regler le problème de la casse pour la liste des gares +DONE 0.21.0 : Faire un bouton Retour +DONE 0.21.1 : documenter les classes +DONE 0.22.0 : Intercepter les erreurs Reseaux +DONE 0.23.0 : Integrer python-conix diff --git a/build_myapp.py b/build_myapp.py index c0a38ec..66f0157 100644 --- a/build_myapp.py +++ b/build_myapp.py @@ -37,7 +37,7 @@ if __name__ == "__main__": # chmod +x /usr/bin/mclock.py""" #Set here your pre install script # p.preremove="""#!/bin/sh # chmod +x /usr/bin/mclock.py""" #Set here your pre remove script - version = "0.7.1" #Version of your software, e.g. "1.2.0" or "0.8.2" + version = "0.20.0" #Version of your software, e.g. "1.2.0" or "0.8.2" build = "1" #Build number, e.g. "1" for the first build of this version of your software. Increment for later re-builds of the same version of your software. #Text with changelog information to be displayed in the package "Details" tab of the Maemo Application Manager changeloginformation = "Fixed (large) icon." diff --git a/src/opt/masstransit/masstransit.cfg b/src/opt/masstransit/masstransit.cfg index b7d87ce..14e9dc9 100644 --- a/src/opt/masstransit/masstransit.cfg +++ b/src/opt/masstransit/masstransit.cfg @@ -1,10 +1,325 @@ [ListeDesGares] -bibliotheque francois mitterand = BFM -savigny sur orge = SAO -melun = MEL -juvisy = JY -gare de lyon = PAA -chatelet = CLX -villeneuve st georges = VSG -le mee = WEE +BAGNEAUX SUR LOING = BXN +BOIS LE ROI = BJR +BOURRON MARLOTTE GREZ = BOM +BOUSSY ST ANTOINE = BXI +BRUNOY = BNY +CESSON = CES +CHANTILLY GOUVIEUX = CLY +CHATELET LES HALLES = CLX +COMBS LA VILLE QUINCY = CBV +CORBEIL ESSONNES = COE +CREIL = CL +DORDIVES = DDI +EVRY = EVR +EVRY COURCOURONNES = EVC +FERRIERES FONTENAY = FFY +FONTAINEBLEAU AVON = FON +GARE DU NORD = GDS +GARGES SARCELLES = GAJ +GOUSSAINVILLE = GOU +GRAND BOURG = GBG +GRIGNY CENTRE = GGG +JUVISY = JY +LA BORNE BLANCHE = BBN +LE BRAS DE FER = BFX +LE MEE = WEE +LE VERT DE MAISONS = VD +LES NOUES = LNX +LIEUSAINT MOISSY = LIU +LOUVRES = LOV +MAISONS ALFORT ALFORTVILLE = MFA +MELUN = MEL +MONTARGIS = MS +MONTEREAU = MTU +MONTGERON CROSNE = KRW +MONTIGNY SUR LOING = MKN +MORET VENEUX LES SABLONS = MOR +NEMOURS ST PIERRE = NSP +ORANGIS BOIS DE L EPINE = OBP +ORRY LA VILLE COYE LA FORET = ORY +PIERREFITTE STAINS = PRF +RIS ORANGIS = RIS +SAVIGNY LE TEMPLE NANDY = ZTN +SOUPPES CHÂTEAU LANDON = SPP +ST DENIS = SDE +ST MAMMES = SF +STADE DE FRANCE ST DENIS = SFD +SURVILLIERS FOSSES = SUR +THOMERY = TMR +VIGNEUX SUR SEINE = VGS +VILLENEUVE PRAIRIE = VP +VILLENEUVE ST GEORGES = VSG +VILLENEUVE TRIAGE = VTV +VILLIERS LE BEL GONESSE ARNOUVILLE = VIB +VIRY CHATILLON = VWC +YERRES = YES +ARGENTEUIL = ARW +AUBERGENVILLE ELISABETHVILLE = AEH +BECON LES BRUYERES = BEC +BOIS COLOMBES = BCO +CHAVILLE RIVE DROITE = CWJ +CLICHY LEVALLOIS = CLL +COLOMBES = CBK +CONFLANS SAINTE HONORINE = CSH +CORMEILLES EN PARISIS = CPA +COURBEVOIE = KOU +EPONE MEZIERES = EPO +ERAGNY NEUVILLE = ERA +ERMONT EAUBONNE = ERE +GARE ST LAZARE = PSL +HERBLAY = HRY +HOUILLES CARRIERES SUR SEINE = HAR +LA DEFENSE GARE SNCF = LDU +LA FRETTE MONTIGNY = FMY +LA GARENNE COLOMBES = LGK +LE STADE = LSD +LE VAL D OR = VDO +LES CLAIRIERES DE VERNEUIL = KVE +LES MUREAUX = LMU +LES VALLEES = LWA +MAISONS LAFFITTE = MLF +MANTES LA JOLIE = MTE +MANTES STATION = MTQ +MONTREUIL = MFL +NANTERRE UNIVERSITE = NUN +POISSY = PSY +PONT CARDINET = PTC +PONTOISE = PSE +PUTEAUX = PTX +SANNOIS = SNN +SARTROUVILLE = SVL +SEVRES VILLE D AVRAY = VDV +ST CLOUD = SCD +ST OUEN L AUMONE QUARTIER DE L EGLIS = XOA +SURESNES MONT VALERIEN = MVH +VAL D ARGENTEUIL = VDA +VERNOUILLET VERNEUIL = VET +VERSAILLES RIVE DROITE = VRD +VILLENNES SUR SEINE = VSW +VIROFLAY RIVE DROITE = VFD +ABLON = ABL +ARPAJON = ARP +ATHIS MONS = ATH +BIBLIOTHEQUE F. MITTERRAND = BFM +BIEVRES = BIS +BOULEVARD VICTOR = BVI +BRETIGNY = BY +BREUILLET BRUYERES LE CHATEL = BIH +BREUILLET VILLAGE = BRW +CHAMP DE MARS TOUR EIFFEL = CPM +CHAVILLE VELIZY = CHV +CHILLY MAZARIN = CAZ +CHOISY LE ROI = CLR +DOURDAN = D +EGLY = ELY +EPINAY SUR ORGE = EYO +GRAVIGNY BALIZY = GBI +IGNY = IGY +INVALIDES = INV +ISSY = ISY +ISSY VAL DE SEINE = ISP +IVRY SUR SEINE = IV +JAVEL = JVL +JOUY EN JOSAS = JAS +LA NORVILLE ST GERMAIN LES ARPAJON = NG +LES ARDOINES = LAD +LONGJUMEAU = LJU +MASSY PALAISEAU RER C = MPU +MEUDON VAL FLEURY = MFY +MUSEE D ORSAY = MDS +PETIT JOUY LES LOGES = PJ +PETIT VAUX = PV +PONT DE L ALMA = PDM +PORCHEFONTAINE = POA +SAVIGNY SUR ORGE = SAO +SERMAISE = SXE +ST CHERON = SCW +ST MICHEL NOTRE DAME = SHL +ST MICHEL SUR ORGE = SHO +STE GENEVIEVE DES BOIS = SXG +VAUBOYEN = VBO +VERSAILLES CHANTIERS = VC +VERSAILLES R G CHATEAU DE VERSAILLES = VRG +VILLENEUVE LE ROI = VRI +VIROFLAY RIVE GAUCHE = VFG +VITRY SUR SEINE = VY +BOURAY = BSO +CHAMARANDE = CHK +ETAMPES = ETP +ETRECHY = ETY +GARE D'AUSTERLITZ = PZB +LARDY = LYO +MAROLLES EN HUREPOIX = MSX +ST MARTIN D ETAMPES = SME +CHAMPAGNE SUR SEINE = CME +CHARTRETTES = CJR +HERICY = HER +LA GRANDE PAROISSE = GPA +LIVRY SUR SEINE = LYQ +VERNOU SUR SEINE = VSS +VULAINES SUR SEINE SAMOREAU = VUN +GARE DE LYON = PLY +FONTAINE LE PORT = FPO +CHANGIS ST JEAN = CJN +CHATEAU THIERRY = CTH +CHELLES GOURNAY = CSG +CHEZY SUR MARNE = CYZ +COULOMMIERS = CO +ESBLY = EY +FAREMOUTIERS POMMEUSE = FMP +GUERARD LA CELLE SUR MORIN = GCM +LA FERTE SOUS JOUARRE = LFJ +LAGNY THORIGNY = LGY +MARLES EN BRIE = MLB +MEAUX = MEA +MORTCERF = MOF +MOUROUX = MXK +NANTEUIL SAACY = NAU +NOGENT L ARTAUD CHARLY = NAA +TOURNAN = TOU +TRILPORT = TLP +VAIRES TORCY = VAI +ASNIERES = AEE +AUBER = AUU +BRY SUR MARNE = BQA +BUSSY ST GEORGES = BXG +CHARLES DE GAULLE-ETOILE = CGP +GARE DE LYON = GYN +LA DEFENSE RER A = GAW +LOGNES = LQN +MARNE LA VALLEE CHESSY = MVC +NANTERRE PREFECTURE SNCF = NAF +NATION = NTN +NEUILLY PLAISANCE = NYP +NOISIEL = NSL +NOISY CHAMPS = NYC +NOISY LE GRAND MONT D EST = NYG +TORCY MARNE LA VALLEE = TOC +VAL D EUROPE = VDE +VAL DE FONTENAY RER A = VFR +VINCENNES = VNC +CERGY LE HAUT = CJV +CERGY PREFECTURE = CYP +CERGY ST CHRISTOPHE = CYC +CONFLANS FIN D OISE = CFD +NEUVILLE UNIVERSITE = NUE +AEROPORT CDG 2 TGV = RYR +ANTONY = ATW +AUBERVILLIERS LA COURNEUVE = ALC +AULNAY SOUS BOIS = AB +BLANC MESNIL = BAM +BOURG LA REINE = BQQ +BURES SUR YVETTE = BVJ +CITE UNIVERSITAIRE = CUF +COURCELLE SUR YVETTE = CVW +DENFERT ROCHEREAU = DFR +DRANCY = DRN +FONTAINE MICHALON = FMN +GIF SUR YVETTE = GIF +LA CROIX DE BERNY = XBY +LA HACQUINIERE = HAQ +LA PLAINE STADE DE FRANCE = LPN +LE BOURGET = LBT +LE GUICHET = GUW +LES BACONNETS = BQC +LOZERE = LZV +LUXEMBOURG = LXJ +MASSY PALAISEAU RER B = MP +MASSY VERRIERES RER B = MVP +ORSAY VILLE = ORS +PALAISEAU = PAX +PALAISEAU VILLEBON = PAW +PARC DE SCEAUX = PCX +PARC DES EXPOSITIONS = PEX +PORT ROYAL = PWR +SEVRAN BEAUDOTTES = BDE +ST MICHEL NOTRE DAME = XND +ST REMY LES CHEVREUSE = SNM +VILLEPINTE = VPN +AEROPORT CDG 1 = RSY +ARCUEIL CACHAN = ARK +BAGNEUX = BGK +GENTILLY = GTL +LAPLACE = LJA +CHANTELOUP LES VIGNES = CVF +GARGENVILLE = GGV +ISSOU PORCHEVILLE = IPO +JUZIERS = JUZ +LIMAY = LIM +MEULAN HARDRICOURT = MHD +THUN LE PARADIS = TPA +TRIEL SUR SEINE = TSS +VAUX SUR SEINE = VXS +FONTENAY AUX ROSES = FNR +MITRY CLAYE = MY +ROBINSON = RNS +SCEAUX = SKX +SEVRAN LIVRY = SEV +VERT GALANT = VGL +VILLEPARISIS MITRY LE NEUF = VII +BOUFFEMONT MOISSELLES = BOF +DEUIL MONTMAGNY = DEU +DOMONT = DMO +ECOUEN EZANVILLE = ECZ +EPINAY VILLETANEUSE = EPV +GARE DU NORD = PNB +GROSLAY = GRL +LUZARCHES = LUZ +MONTSOULT MAFFLIERS = MSO +SARCELLES ST BRICE = SLL +SEUGY = SWY +VIARMES = VMS +VILLAINES = VW +CHARTRES = CH +CHAVILLE RIVE GAUCHE = CVI +CLAMART = CMA +COIGNIERES = CGW +DREUX = DX +EPERNON = EPN +FONTENAY LE FLEURY = FAF +GARANCIERES LA QUEUE = GAQ +GAZERAN = GZA +HOUDAN = HOA +JOUY = JOY +LA VERRIERE = VYL +LE PERRAY = LPE +LES ESSARTS LE ROI = LSI +MAINTENON = MTN +MARCHEZAIS BROUE = MBR +MEUDON = MDN +MONTFORT L AMAURY MERE = MLM +ORGERUS BEHOUST = OGB +PARIS MONTPARNASSE = PMP +PLAISIR GRIGNON = PG +PLAISIR LES CLAYES = PIE +RAMBOUILLET = RBT +SEVRES RIVE GAUCHE = SVR +ST CYR = SCR +ST PIAT = SPI +ST QUENTIN EN YVELINES = SQY +TACOIGNIERES RICHEBOURG = TAE +TRAPPES = TVO +VANVES MALAKOFF = VMK +VILLEPREUX LES CLAYES = VEP +VILLIERS NEAUPHLE PONTCHARTRAIN = VEH +CHAMP DE COURSES D ENGHIEN = CEG +CHAMPAGNE SUR OISE = CPO +ENGHIEN LES BAINS = EN +ERMONT EAUBONNE = ERT +ERMONT HALTE = ERM +FREPILLON = FPN +GROS NOYER ST PRIX = GNX +L ISLE ADAM PARMAIN = IAP +LA BARRE ORMESSON = LBJ +MERIEL = MLV +MERY SUR OISE = MWO +PERSAN BEAUMONT = PEB +ST LEU LA FORET = SLF +TAVERNY = TVY +VALMONDOIS = VMD +VAUCELLES = VCX +MAREIL SUR MAULDRE = MJM +MAULE = MAE +NEZEL AULNAY = NZL diff --git a/src/opt/masstransit/masstransit.py b/src/opt/masstransit/masstransit.py index e516fe6..5ae9447 100755 --- a/src/opt/masstransit/masstransit.py +++ b/src/opt/masstransit/masstransit.py @@ -1,192 +1,314 @@ #!/usr/bin/python -import pygtk -pygtk.require("2.0") -import gtk +# -*- coding: utf-8 -*- +"affichage des horaires de train" + + + import urllib2 import HTMLParser -import hildon import ConfigParser +import errno +import conic + + +magic = 0xAA55 -from portrait import FremantleRotation +try: + import hildon +except ImportError: + raise ImportError("erreur d'importation de hildon") -#main_window = mainWindow # your main hildon.StackableWindow -app_name = 'NameOfYourApp' # the name of your app -app_version = '1.0' # the version number of your app -initial_mode = FremantleRotation.AUTOMATIC +try : + from portrait import FremantleRotation +except ImportError: + raise ImportError("erreur d'importation de portrait") + +try : + import gtk +except ImportError: + raise ImportError("erreur d'importation de gtk") + +try : + import pygtk +except ImportError: + raise ImportError("erreur d'importation de pygtk") + +pygtk.require("2.0") class LigneHoraire(object): - def __init__(self, code_mission, heure_de_passage): - self.code_mission = code_mission - self.heure_de_passage = heure_de_passage + "une ligne code_mission | heure_de_passage" + def __init__(self, code_mission, heure_de_passage, destination, voie): + self.__code_mission = code_mission + self.__heure_de_passage = heure_de_passage + self.__destination = destination + self.__voie = voie def add_to_treestore(self, treestore): - print treestore - treestore.append(None, [self.code_mission, self.heure_de_passage]) + "ajoute la ligne à un treestore" + treestore.append(None, [self.__code_mission, self.__heure_de_passage, self.__destination, self.__voie]) -class tableParser(HTMLParser.HTMLParser): +class TableParser(HTMLParser.HTMLParser): + "Parse les tableaux html contenant les horaires" def __init__(self): HTMLParser.HTMLParser.__init__(self) - self.table_horaires3 = False - self.code_de_mission = False - self.a_code_de_mission = False - self.heure_de_passage = False - self.liste_train = [] - self.liste_horaire = [] - self.list_ligne_horaire = [] + self.__table_horaires3 = False + self.__code_de_mission = False + self.__a_code_de_mission = False + self.__heure_de_passage = False + self.__destination = False + self.__voie = False + self.__liste_train = [] + self.__liste_horaire = [] + self.__liste_destination = [] + self.__liste_voie = [] + def handle_starttag(self, tag, attrs): + "execute a chaque balise ouvrante" if (tag == 'table' and (dict(attrs)['class'] == 'horaires3')): - self.table_horaires3 = True + self.__table_horaires3 = True - elif self.table_horaires3 and tag == 'td': + elif self.__table_horaires3 and tag == 'td': try: - self.code_de_mission = ( + self.__code_de_mission = ( dict(attrs)['headers'] == 'Code_de_mission') - self.heure_de_passage = ( + self.__heure_de_passage = ( dict(attrs)['headers'] == 'Heure_de_passage') + self.__destination = ( + dict(attrs)['headers'] == 'Destination') + self.__voie = ( + dict(attrs)['headers'] == 'Voie') except KeyError: if dict(attrs).has_key('headers'): raise else: pass else: - self.a_code_de_mission = (tag == 'a' and self.code_de_mission) + self.__a_code_de_mission = (tag == 'a' and self.__code_de_mission) def handle_data(self, data): - if self.a_code_de_mission: - self.liste_train.append(data.strip()) - if self.heure_de_passage: - self.liste_horaire.append(data.strip()) + "execute pour chaque contenu de balise" + if self.__a_code_de_mission: + self.__liste_train.append(data.strip()) + if self.__heure_de_passage: + self.__liste_horaire.append(data.strip()) + if self.__destination: + self.__liste_destination.append(data.strip()) + if self.__voie: + self.__liste_voie.append(data.strip()) - def handle_endtag(self,tag): - self.a_code_de_mission ^= (self.a_code_de_mission and tag == 'a') - self.heure_de_passage ^= (self.heure_de_passage and tag == 'td') - - def get_list_ligne_horaire(self): - print 'get_list_ligne_horaire' - z = 0 - print self.liste_train - for i in self.liste_train: - self.list_ligne_horaire.append(LigneHoraire(code_mission=i, heure_de_passage=self.liste_horaire[z])) - z += 1 - return self.list_ligne_horaire + def handle_endtag(self, tag): + "execute à chaque balise fermante" + self.__a_code_de_mission ^= (self.__a_code_de_mission and tag == 'a') + self.__heure_de_passage ^= (self.__heure_de_passage and tag == 'td') + self.__destination ^= (self.__destination and tag == 'td') + self.__voie ^= (self.__voie and tag == 'td') + @property + def __list_ligne_horaire(self): + "getter" + __list_ligne_horaire = [] + __curseur_horaire = 0 + for __i in self.__liste_train: + __list_ligne_horaire.append(LigneHoraire( + code_mission=__i, + heure_de_passage=self.__liste_horaire[__curseur_horaire], + destination=self.__liste_destination[__curseur_horaire], + voie=self.__liste_voie[__curseur_horaire] + )) + __curseur_horaire += 1 + return __list_ligne_horaire + + def fill_treestore(self, treestore): + "remlpli le treestore avec les resultats" + for __i in self.__list_ligne_horaire: + __i.add_to_treestore(treestore) + +def connection_cb(connection, event, magic): + print "connection_cb(%s, %s, %x)" % (connection, event, magic) + print event.get_status() class Trajet(object): + "trajet d'une gare source à une gare_dest" def __init__(self, gare_source, gare_dest): - self.gare_source = gare_source - self.gare_dest = gare_dest - self.parse() - def get_liste_train(self): - return self.p.liste_train - def get_liste_horaire(self): - return self.p.liste_horaire - def parse(self): - self.p = tableParser() - #print "URL:" - #print 'http://www.transilien.com/web/ITProchainsTrainsAvecDest.do?codeTr3aDepart='+self.gare_source.shortname+'&codeTr3aDest='+self.gare_dest.shortname+'&urlModule=/site/pid/184&gareAcc=true' - rsrc = urllib2.urlopen('http://www.transilien.com/web/ITProchainsTrainsAvecDest.do?codeTr3aDepart='+self.gare_source.shortname+'&codeTr3aDest='+self.gare_dest.shortname+'&urlModule=/site/pid/184&gareAcc=true') - self.p.feed(rsrc.read()) - print "parsing ok" + self.__gare_source = gare_source + self.__gare_dest = gare_dest def refresh_treestore(self, treestore): - print 'refresh' - print treestore - + "met à jour les horaires d'un trajet" treestore.clear() - liste_ligne_horaire = self.p.get_list_ligne_horaire() - print liste_ligne_horaire - for i in liste_ligne_horaire: - print i - i.add_to_treestore(treestore) + __parser = TableParser() + __parser.feed(urllib2.urlopen('http://www.transilien.com/web/ITProchainsTrainsAvecDest.do?codeTr3aDepart='+self.__gare_source.shortname+'&codeTr3aDest='+self.__gare_dest.shortname+'&urlModule=/site/pid/184&gareAcc=true').read()) + __parser.fill_treestore(treestore) + class ConfFile(object): + "fichier contenant les gares" def __init__(self, fichier): - self.c = ConfigParser.ConfigParser() - self.c.read(fichier) - def get_short_name(self, longname): - return self.c.get('ListeDesGares', longname) - def get_liste_des_gares(self): - return self.c.items('ListeDesGares') + self.config = ConfigParser.ConfigParser() + self.config.read(fichier) + class LongNameGare(object): + "nom long d'une gare" def __init__(self, longname): - self.longname = longname + self.__longname = longname def get_gare(self, conffile): - short_name = conffile.get_short_name(self.longname) - return Gare(short_name) + "retourne une gare à partir d'un nom long" + return Gare(conffile.config.get('ListeDesGares', self.__longname)) class Gare(object): + "gare" def __init__(self, shortname): self.shortname = shortname - - - class TransilienUI: + "interface hildon" def __init__(self): - mainWindow = hildon.Window() - mainWindow.set_title("Horaires des Prochains Trains") - mainWindow.connect("destroy", self.on_mainWindow_destroy) + self.main_window = hildon.Window() + self.main_window.set_title("Horaires des Prochains Trains") + self.main_window.connect("destroy", self.on_main_window_destroy) - rotation_object = FremantleRotation(app_name, mainWindow, app_version, initial_mode) - refreshButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, - hildon.BUTTON_ARRANGEMENT_HORIZONTAL, "Actualiser") - refreshButton.connect("clicked", self.on_refreshButton_clicked) + rotation_object = FremantleRotation( + 'NameOfYourApp', + self.main_window, + '1.0', + FremantleRotation.AUTOMATIC + ) + + refresh_button = hildon.Button( + gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, + hildon.BUTTON_ARRANGEMENT_HORIZONTAL, + "Actualiser" + ) + retour_button = hildon.Button( + gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, + hildon.BUTTON_ARRANGEMENT_HORIZONTAL, + "Retour" + ) + refresh_button.connect("clicked", self.on_refresh_button_clicked) + retour_button.connect("clicked", self.on_retour_button_clicked) - self.treestore = gtk.TreeStore(str, str) + self.treestore = gtk.TreeStore(str, str, str, str) self.treeview = gtk.TreeView(self.treestore) - self.tvcolumn_train = gtk.TreeViewColumn('Train', gtk.CellRendererText(), text=0) - self.treeview.append_column(self.tvcolumn_train) + self.treeview.append_column( + gtk.TreeViewColumn( + 'Train', + gtk.CellRendererText(), + text=0 + )) - self.tvcolumn_horaire = gtk.TreeViewColumn('Horaire', gtk.CellRendererText(), text=1) - self.treeview.append_column(self.tvcolumn_horaire) + self.treeview.append_column( + gtk.TreeViewColumn( + 'Horaire', + gtk.CellRendererText(), + text=1 + )) + + self.treeview.append_column( + gtk.TreeViewColumn( + 'Destination', + gtk.CellRendererText(), + text=2 + )) + self.treeview.append_column( + gtk.TreeViewColumn( + 'Voie', + gtk.CellRendererText(), + text=3 + )) - picker_button_source = hildon.PickerButton(gtk.HILDON_SIZE_AUTO, hildon.BUTTON_ARRANGEMENT_VERTICAL) - picker_button_source.set_title("Gare de Depart") + + self.combo_source = hildon.TouchSelectorEntry(text=True) self.combo_dest = hildon.TouchSelectorEntry(text=True) - for i in ConfFile('/opt/masstransit/masstransit.cfg').get_liste_des_gares(): - self.combo_source.append_text(i[0]) - self.combo_dest.append_text(i[0]) - picker_button_source.set_selector(self.combo_source) + liste = ConfFile('/opt/masstransit/masstransit.cfg').config.items('ListeDesGares') + liste.sort() + for i in liste: + self.combo_source.append_text(i[0].capitalize()) + self.combo_dest.append_text(i[0].capitalize()) - - picker_button_dest = hildon.PickerButton(gtk.HILDON_SIZE_AUTO, hildon.BUTTON_ARRANGEMENT_VERTICAL) + picker_button_source = hildon.PickerButton( + gtk.HILDON_SIZE_AUTO, + hildon.BUTTON_ARRANGEMENT_VERTICAL) + + picker_button_dest = hildon.PickerButton( + gtk.HILDON_SIZE_AUTO, + hildon.BUTTON_ARRANGEMENT_VERTICAL + ) + + picker_button_source.set_title("Gare de Depart") picker_button_dest.set_title("Gare d'arrivee") - picker_button_dest.set_selector(self.combo_dest) - vBox = gtk.VBox() - hBox = gtk.HBox() - vBox.pack_start(hBox) - hBox.pack_start(picker_button_source) - hBox.pack_start(picker_button_dest) - vBox.pack_start(self.treeview) - vBox.pack_start(refreshButton) + picker_button_source.set_selector(self.combo_source) + picker_button_dest.set_selector(self.combo_dest) + vertical_box = gtk.VBox() + horizontal_box = gtk.HBox() + vertical_box.pack_start(horizontal_box) + horizontal_box.pack_start(picker_button_source) + horizontal_box.pack_start(picker_button_dest) + horizontal_box.pack_start(retour_button) + vertical_box.pack_start(self.treeview) + vertical_box.pack_start(refresh_button) - mainWindow.add(vBox) - mainWindow.show_all() + self.main_window.add(vertical_box) + self.main_window.show_all() - def on_mainWindow_destroy(self, widget): + def on_main_window_destroy(self, widget): + "quitte l'application à la fermeture de la fenetre" gtk.main_quit() - def on_refreshButton_clicked(self, widget): + + def on_retour_button_clicked(self, widget): + "le bouton retour est clicked" + col_source = self.combo_source.get_active(0) + col_dest = self.combo_dest.get_active(0) + self.combo_source.set_active(0, col_dest) + self.combo_dest.set_active(0, col_source) + self.refresh() + + def on_refresh_button_clicked(self, widget): + "le bouton refresh est clicked" + self.refresh() + + def refresh(self): + "met a jour les horaires" conf = ConfFile('/opt/masstransit/masstransit.cfg') - gare_source = LongNameGare(self.combo_source.get_current_text()).get_gare(conf) - gare_dest = LongNameGare(self.combo_dest.get_current_text()).get_gare(conf) - trajet = Trajet(gare_source , gare_dest) - print trajet - print self.treestore - trajet.refresh_treestore(self.treestore) - - + try : + gare_source = LongNameGare(self.combo_source.get_current_text()).get_gare(conf) + except AttributeError: + if self.combo_source.get_current_text() is None: + gtk.Dialog.run(hildon.hildon_note_new_information(self.main_window, "Vous devez remplir la gare source")) + else: + raise + else: + try : + gare_dest = LongNameGare(self.combo_dest.get_current_text()).get_gare(conf) + except AttributeError: + if self.combo_dest.get_current_text() is None: + gtk.Dialog.run(hildon.hildon_note_new_information(self.main_window, "Vous devez remplir la gare de destination")) + else: + raise + else: + trajet = Trajet(gare_source , gare_dest) + try : + trajet.refresh_treestore(self.treestore) + except urllib2.URLError, e: + global magic + connection = conic.Connection() + connection.connect("connection-event", connection_cb, magic) + connection.request_connection(conic.CONNECT_FLAG_NONE) + trajet.refresh_treestore(self.treestore) + + if __name__ == "__main__": TransilienUI() gtk.main() +