commit for merge/revert
[pywienerlinien] / wlSearch.py
1 # -*- coding: utf-8 -*-
2
3 import urllib
4 import sys
5 from datetime import datetime
6 import settings
7 import webbrowser
8 import urllib2
9
10 from parseHtml import Parser
11
12 from PySide.QtDeclarative import QDeclarativeView
13
14 def QMLModel(overview, details):
15     # Mapping from the "overview" data structure to a "plain" data
16     # structure to be used as model for the qml listview
17     r = []
18     i = 0
19     for item in overview:
20         d = {
21                 'date': item['date'].strftime('%d.%m.%Y') if item['date'] else u'Fußweg',
22                 'duration': item['duration'].strftime('%H:%M'),
23                 'price': item['price'],
24                 'change': item['change'],
25                 'details': details[i],
26         }
27
28         if len(item['time']) == 2 and all(x is not None for x in item['time']):
29             d.update({
30                 'time_from': item['time'][0].strftime('%H:%M'),
31                 'time_to': item['time'][1].strftime('%H:%M'),
32             })
33         else:
34             d.update({'time_from': '-', 'time_to': '-'})
35
36         r.append(d)
37         i += 1
38     return r
39
40
41 class Search:
42
43     def __init__(self, origin, destination, origin_type='stop', destination_type='stop'):
44         self.origin = origin
45         self.destination = destination
46         self.origin_type = origin_type
47         self.destination_type = destination_type
48         self.view = None
49         self.qml_model = None
50
51     def get_html(self, dtime=datetime.now()):
52         return urllib2.urlopen('%s?%s' % (settings.action, self.get_parameter(dtime)))
53
54     def open_browser(self, dtime=datetime.now()):
55         webbrowser.open('%s?%s' % (settings.action, self.get_parameter(dtime)))
56
57     def open_qml(self, dtime=datetime.now()):
58         p = Parser(self.get_html(dtime))
59         self.qml_model = QMLModel(p.overview, p.details)
60         self.view = QDeclarativeView()
61         self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)
62         self.view.setSource('ui/Overview.qml')
63         self.view.rootObject().setProperty('model', self.qml_model)
64         self.view.show()
65
66     def get_datetime(self, dtime):
67         return (dtime.strftime('%d.%m.%Y'), dtime.strftime('%H:%M'))
68
69     def get_parameter(self, dtime):
70         date, time = self.get_datetime(dtime)
71
72         post = {'language': 'de',
73             'sessionID': 0,
74             'requestID': 0,
75             'execInst': 'normal',
76             'command': '',
77             'anySigWhenPerfectNoOtherMatches': 1,
78             'itdLPxx_locationServerActive': '',
79             'locationServerActive': 0,
80             'typeInfo_origin': 'invalid',
81             'placeState_origin': 'empty',
82             'placeInfo_origin': 'invalid',
83             'place_origin': 'Wien',
84             'type_origin': self.origin_type, # stop/address/poi
85             'nameState_origin': 'empty',
86             'nameInfo_origin': 'invalid',
87             'anyType_origin': '',
88             'name_origin': self.origin,
89             'typeInfo_destination': 'invalid',
90             'placeState_destination': 'empty',
91             'placeInfo_destination': 'invalid',
92             'place_destination': 'Wien',
93             'type_destination': self.destination_type, # stop/address/poi
94             'nameState_destination': 'empty',
95             'nameInfo_destination': 'invalid',
96             'anyType_destination': '',
97             'name_destination': self.destination,
98             'itdTripDateTimeDepArr': 'dep',
99             'itdDateDayMonthYear': date, # DD.MM.YYYY
100             'itdTime': time, # HH:MM
101             'submitbutton': 'SUCHEN'
102         }
103
104         params = urllib.urlencode(post)
105         return params