1 # -*- coding: utf-8 -*-
5 from datetime import datetime
10 from parseHtml import Parser
12 from PySide.QtCore import Qt
13 from PySide.QtDeclarative import QDeclarativeView
15 def QMLModel(overview, details):
16 # Mapping from the "overview" data structure to a "plain" data
17 # structure to be used as model for the qml listview
22 'date': item['date'].strftime('%d.%m.%Y') if item['date'] else u'Fußweg',
23 'duration': item['duration'].strftime('%H:%M'),
24 'price': item['price'],
25 'change': item['change'],
26 'details': details[i],
29 if len(item['time']) == 2 and all(x is not None for x in item['time']):
31 'time_from': item['time'][0].strftime('%H:%M'),
32 'time_to': item['time'][1].strftime('%H:%M'),
35 d.update({'time_from': '-', 'time_to': '-'})
44 def __init__(self, origin, destination, origin_type='stop', destination_type='stop', parent=None):
46 self.destination = destination
47 self.origin_type = origin_type
48 self.destination_type = destination_type
53 def get_html(self, dtime=None):
55 dtime = datetime.now()
56 #FIXME replace with logger
57 print "get_html (%s:%s:%s)" % tuple(dtime.timetuple())[3:6]
58 return urllib2.urlopen('%s?%s' % (settings.action, self.get_parameter(dtime)))
60 def open_browser(self, dtime=datetime.now()):
61 webbrowser.open('%s?%s' % (settings.action, self.get_parameter(dtime)))
63 def open_qml(self, dtime=None):
65 dtime = datetime.now()
66 #FIXME replace with logger
67 print "open_qml (%s:%s:%s)" % tuple(dtime.timetuple())[3:6]
68 p = Parser(self.get_html(dtime))
69 self.qml_model = QMLModel(p.overview, p.details)
70 self.view = QDeclarativeView(self.parent)
71 self.view.setWindowTitle('Search results')
72 self.view.setWindowFlags(Qt.Window)
73 # quick & dirty workaround
75 self.view.setAttribute(Qt.WA_Maemo5StackedWindow)
78 self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)
79 self.view.setSource('ui/Overview.qml')
80 self.view.rootObject().setProperty('model', self.qml_model)
83 def get_datetime(self, dtime):
84 return (dtime.strftime('%d.%m.%Y'), dtime.strftime('%H:%M'))
86 def get_parameter(self, dtime):
87 date, time = self.get_datetime(dtime)
89 post = {'language': 'de',
94 'anySigWhenPerfectNoOtherMatches': 1,
95 'itdLPxx_locationServerActive': '',
96 'locationServerActive': 0,
97 'typeInfo_origin': 'invalid',
98 'placeState_origin': 'empty',
99 'placeInfo_origin': 'invalid',
100 'place_origin': 'Wien',
101 'type_origin': self.origin_type, # stop/address/poi
102 'nameState_origin': 'empty',
103 'nameInfo_origin': 'invalid',
104 'anyType_origin': '',
105 'name_origin': self.origin,
106 'typeInfo_destination': 'invalid',
107 'placeState_destination': 'empty',
108 'placeInfo_destination': 'invalid',
109 'place_destination': 'Wien',
110 'type_destination': self.destination_type, # stop/address/poi
111 'nameState_destination': 'empty',
112 'nameInfo_destination': 'invalid',
113 'anyType_destination': '',
114 'name_destination': self.destination,
115 'itdTripDateTimeDepArr': 'dep',
116 'itdDateDayMonthYear': date, # DD.MM.YYYY
117 'itdTime': time, # HH:MM
118 'submitbutton': 'SUCHEN'
121 params = urllib.urlencode(post)