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
[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
#!/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()
+