113 ui.infoBox->hide(); |
111 ui.infoBox->hide(); |
114 connect(ui.searchButton, SIGNAL(clicked()), SLOT(startSearch())); |
112 connect(ui.searchButton, SIGNAL(clicked()), SLOT(startSearch())); |
115 connect(ui.flightEdit, SIGNAL(returnPressed()), SLOT(startSearch())); |
113 connect(ui.flightEdit, SIGNAL(returnPressed()), SLOT(startSearch())); |
116 |
114 |
117 setWindowTitle("Flight Info"); |
115 setWindowTitle("Flight Info"); |
118 QTimer::singleShot(0, this, SLOT(delayedInit())); |
|
119 |
116 |
120 // Rendered from the public-domain vectorized aircraft |
117 // Rendered from the public-domain vectorized aircraft |
121 // http://openclipart.org/media/people/Jarno |
118 // http://openclipart.org/media/people/Jarno |
122 m_map = QPixmap(":/aircraft.png"); |
119 m_map = QPixmap(":/aircraft.png"); |
123 |
120 |
125 QAction *searchYesterdayAction = new QAction("Yesterday's Flight", this); |
122 QAction *searchYesterdayAction = new QAction("Yesterday's Flight", this); |
126 QAction *randomAction = new QAction("Random Flight", this); |
123 QAction *randomAction = new QAction("Random Flight", this); |
127 connect(searchTodayAction, SIGNAL(triggered()), SLOT(today())); |
124 connect(searchTodayAction, SIGNAL(triggered()), SLOT(today())); |
128 connect(searchYesterdayAction, SIGNAL(triggered()), SLOT(yesterday())); |
125 connect(searchYesterdayAction, SIGNAL(triggered()), SLOT(yesterday())); |
129 connect(randomAction, SIGNAL(triggered()), SLOT(randomFlight())); |
126 connect(randomAction, SIGNAL(triggered()), SLOT(randomFlight())); |
|
127 connect(&m_manager, SIGNAL(finished(QNetworkReply*)), |
|
128 this, SLOT(handleNetworkData(QNetworkReply*))); |
130 #if defined(Q_OS_SYMBIAN) |
129 #if defined(Q_OS_SYMBIAN) |
131 menuBar()->addAction(searchTodayAction); |
130 menuBar()->addAction(searchTodayAction); |
132 menuBar()->addAction(searchYesterdayAction); |
131 menuBar()->addAction(searchYesterdayAction); |
133 menuBar()->addAction(randomAction); |
132 menuBar()->addAction(randomAction); |
134 #else |
133 #else |
138 setContextMenuPolicy(Qt::ActionsContextMenu); |
137 setContextMenuPolicy(Qt::ActionsContextMenu); |
139 #endif |
138 #endif |
140 } |
139 } |
141 |
140 |
142 private slots: |
141 private slots: |
143 void delayedInit() { |
|
144 #if defined(Q_OS_SYMBIAN) |
|
145 qt_SetDefaultIap(); |
|
146 #endif |
|
147 } |
|
148 |
|
149 |
142 |
150 void handleNetworkData(QNetworkReply *networkReply) { |
143 void handleNetworkData(QNetworkReply *networkReply) { |
151 if (!networkReply->error()) { |
144 if (!networkReply->error()) { |
152 // Assume UTF-8 encoded |
145 if (!mapReplies.contains(networkReply)) { |
153 QByteArray data = networkReply->readAll(); |
146 // Assume UTF-8 encoded |
154 QString xml = QString::fromUtf8(data); |
147 QByteArray data = networkReply->readAll(); |
155 digest(xml); |
148 QString xml = QString::fromUtf8(data); |
|
149 digest(xml); |
|
150 } else { |
|
151 mapReplies.removeOne(networkReply); |
|
152 m_map.loadFromData(networkReply->readAll()); |
|
153 update(); |
|
154 } |
156 } |
155 } |
157 networkReply->deleteLater(); |
156 networkReply->deleteLater(); |
158 networkReply->manager()->deleteLater(); |
|
159 } |
|
160 |
|
161 void handleMapData(QNetworkReply *networkReply) { |
|
162 if (!networkReply->error()) { |
|
163 m_map.loadFromData(networkReply->readAll()); |
|
164 update(); |
|
165 } |
|
166 networkReply->deleteLater(); |
|
167 networkReply->manager()->deleteLater(); |
|
168 } |
157 } |
169 |
158 |
170 void today() { |
159 void today() { |
171 QDateTime timestamp = QDateTime::currentDateTime(); |
160 QDateTime timestamp = QDateTime::currentDateTime(); |
172 m_searchDate = timestamp.date(); |
161 m_searchDate = timestamp.date(); |
183 void searchFlight() { |
172 void searchFlight() { |
184 ui.searchBar->show(); |
173 ui.searchBar->show(); |
185 ui.infoBox->hide(); |
174 ui.infoBox->hide(); |
186 ui.flightStatus->hide(); |
175 ui.flightStatus->hide(); |
187 ui.flightName->setText("Enter flight number"); |
176 ui.flightName->setText("Enter flight number"); |
|
177 ui.flightEdit->setFocus(); |
|
178 #ifdef QT_KEYPAD_NAVIGATION |
|
179 ui.flightEdit->setEditFocus(true); |
|
180 #endif |
188 m_map = QPixmap(); |
181 m_map = QPixmap(); |
189 update(); |
182 update(); |
190 } |
183 } |
191 |
184 |
192 void startSearch() { |
185 void startSearch() { |
222 // random flight as sample |
215 // random flight as sample |
223 m_url = QUrl(FLIGHTVIEW_RANDOM); |
216 m_url = QUrl(FLIGHTVIEW_RANDOM); |
224 ui.flightName->setText("Getting a random flight..."); |
217 ui.flightName->setText("Getting a random flight..."); |
225 } |
218 } |
226 |
219 |
227 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
220 m_manager.get(QNetworkRequest(m_url)); |
228 connect(manager, SIGNAL(finished(QNetworkReply*)), |
|
229 this, SLOT(handleNetworkData(QNetworkReply*))); |
|
230 manager->get(QNetworkRequest(m_url)); |
|
231 } |
221 } |
232 |
222 |
233 |
223 |
234 private: |
224 private: |
235 |
225 |
246 QString href = data.mid(i, data.indexOf('\"', i + 8) - i + 1); |
236 QString href = data.mid(i, data.indexOf('\"', i + 8) - i + 1); |
247 QRegExp regex("dpap=([A-Za-z0-9]+)"); |
237 QRegExp regex("dpap=([A-Za-z0-9]+)"); |
248 regex.indexIn(href); |
238 regex.indexIn(href); |
249 QString airport = regex.cap(1); |
239 QString airport = regex.cap(1); |
250 m_url.addEncodedQueryItem("dpap", QUrl::toPercentEncoding(airport)); |
240 m_url.addEncodedQueryItem("dpap", QUrl::toPercentEncoding(airport)); |
251 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
241 m_manager.get(QNetworkRequest(m_url)); |
252 connect(manager, SIGNAL(finished(QNetworkReply*)), |
|
253 this, SLOT(handleNetworkData(QNetworkReply*))); |
|
254 manager->get(QNetworkRequest(m_url)); |
|
255 return; |
242 return; |
256 } |
243 } |
257 |
244 |
258 QXmlStreamReader xml(data); |
245 QXmlStreamReader xml(data); |
259 bool inFlightName = false; |
246 bool inFlightName = false; |
285 if (cn.contains("fieldValue")) |
272 if (cn.contains("fieldValue")) |
286 inFieldValue = true; |
273 inFieldValue = true; |
287 } |
274 } |
288 if (xml.name() == "img" && inFlightMap) { |
275 if (xml.name() == "img" && inFlightMap) { |
289 QString src = xml.attributes().value("src").toString(); |
276 QString src = xml.attributes().value("src").toString(); |
290 src.prepend("http://mobile.flightview.com"); |
277 src.prepend("http://mobile.flightview.com/"); |
291 QUrl url = QUrl::fromPercentEncoding(src.toAscii()); |
278 QUrl url = QUrl::fromPercentEncoding(src.toAscii()); |
292 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
279 mapReplies.append(m_manager.get(QNetworkRequest(url))); |
293 connect(manager, SIGNAL(finished(QNetworkReply*)), |
|
294 this, SLOT(handleMapData(QNetworkReply*))); |
|
295 manager->get(QNetworkRequest(url)); |
|
296 } |
280 } |
297 } |
281 } |
298 |
282 |
299 if (xml.tokenType() == QXmlStreamReader::EndElement) { |
283 if (xml.tokenType() == QXmlStreamReader::EndElement) { |
300 inFlightName &= xml.name() != "h1"; |
284 inFlightName &= xml.name() != "h1"; |