downloadwidget.cpp |
26 | 26 | #include <QtCore/QFile> |
27 | 27 | #include <QtCore/QSettings> |
28 | 28 | #include <QtGui/QLayout> |
29 | | #include <QtNetwork/QNetworkReply> |
30 | 29 | #include <QtNetwork/QNetworkRequest> |
31 | 30 | |
32 | 31 | DownloadWidget::DownloadWidget(QWidget *parent) |
... | ... | |
40 | 39 | m_startLevel(0), |
41 | 40 | m_dlRect(), |
42 | 41 | m_dlList(), |
| 42 | m_currentDownload(0), |
43 | 43 | m_prefix("OSM"), |
44 | 44 | m_up(new QLabel("N 0", this)), |
45 | 45 | m_left(new QLabel("E 0", this)), |
... | ... | |
50 | 50 | m_skipExisting(new QCheckBox("S&kip already downloaded tiles", this)), |
51 | 51 | m_poiType(new QComboBox(this)), |
52 | 52 | m_makePOILayer(new QCheckBox("&Load file after download", this)), |
53 | | m_destFilename(new QLineEdit(QDir::homePath()+"/pois.osm", this)) |
| 53 | m_destFilename(new QLineEdit(QDir::homePath()+"/pois.osm", this)), |
| 54 | m_packageList(new QListWidget(this)), |
| 55 | m_destDir(new QLineEdit(QDir::homePath(), this)) |
54 | 56 | { |
55 | 57 | QGridLayout *layout = new QGridLayout(this); |
56 | 58 | layout->setContentsMargins(0, 0, 0, 0); |
... | ... | |
87 | 89 | label->setFrameShape(QLabel::Box); |
88 | 90 | layout->addWidget(label, 1, 1, 1, 2); |
89 | 91 | |
90 | | label = new QLabel("Download up to level", this); |
| 92 | label = new QLabel("Download up to level:", this); |
91 | 93 | layout->addWidget(label, 3, 0, 1, 2); |
92 | 94 | |
93 | 95 | m_levelSpinBox->setRange(0, 18); |
94 | 96 | layout->addWidget(m_levelSpinBox, 3, 2, 1, 2); |
95 | 97 | |
96 | | label = new QLabel("Download into directory", this); |
| 98 | label = new QLabel("Download into directory:", this); |
97 | 99 | layout->addWidget(label, 4, 0, 1, 2); |
98 | 100 | |
99 | 101 | m_prefixInput->setText(m_prefix); |
... | ... | |
138 | 140 | widget = new QWidget(this); |
139 | 141 | layout = new QGridLayout(widget); |
140 | 142 | layout->setContentsMargins(0, 0, 0, 0); |
| 143 | layout->setRowStretch(1, 1); |
141 | 144 | |
142 | | label = new QLabel("TODO", this); |
| 145 | label = new QLabel("This Page does not work yet!!!", this); |
143 | 146 | label->setAlignment(Qt::AlignCenter); |
144 | | layout->addWidget(label, 0, 0); |
| 147 | layout->addWidget(label, 0, 0, 1, 2); |
| 148 | |
| 149 | QPushButton *updateList = new QPushButton("Update list", this); |
| 150 | connect(updateList, SIGNAL(clicked()), this, SLOT(updateSourceList())); |
| 151 | layout->addWidget(updateList, 0, 2); |
| 152 | |
| 153 | layout->addWidget(m_packageList, 1, 0, 1, 3); |
| 154 | |
| 155 | label = new QLabel("Download into directory:", this); |
| 156 | layout->addWidget(label, 2, 0); |
| 157 | |
| 158 | layout->addWidget(m_destDir, 2, 1, 1, 2); |
145 | 159 | |
146 | 160 | m_tabWidget->addTab(widget, "&Routing data"); |
147 | 161 | |
... | ... | |
204 | 218 | case POIs: |
205 | 219 | replyFinishedPOIs(reply); |
206 | 220 | break; |
| 221 | case SourceList: |
| 222 | if (reply->error() == QNetworkReply::NoError) { |
| 223 | QStringList list = QString::fromUtf8(reply->readAll().constData()).split("\n"); |
| 224 | foreach (const QString &pkg, list) { |
| 225 | QListWidgetItem *item = new QListWidgetItem(pkg.section('@', 0, 0)); |
| 226 | item->setData(Qt::UserRole, QVariant(pkg.section('@', 1))); |
| 227 | m_packageList->addItem(item); |
| 228 | } |
| 229 | } |
| 230 | break; |
207 | 231 | } |
208 | 232 | reply->deleteLater(); |
209 | 233 | } |
... | ... | |
214 | 238 | m_dlProgress->setValue(bytesReceived); |
215 | 239 | } |
216 | 240 | |
| 241 | void DownloadWidget::saveDownload() |
| 242 | { |
| 243 | if (m_currentDownload->error() != QNetworkReply::NoError) { |
| 244 | return; |
| 245 | } |
| 246 | QString path = m_currentDownload->url().path().section("/", -2); |
| 247 | QByteArray a = m_currentDownload->readAll(); |
| 248 | |
| 249 | QFile file(m_destDir->text()+"/"+path); |
| 250 | if (file.open(QFile::WriteOnly)) { |
| 251 | file.write(a); |
| 252 | } |
| 253 | } |
| 254 | |
| 255 | void DownloadWidget::updateSourceList() |
| 256 | { |
| 257 | m_downloadMode = SourceList; |
| 258 | m_manager->get(QNetworkRequest(QUrl("http://host.domain.tld/path/source.list"))); |
| 259 | } |
| 260 | |
217 | 261 | void DownloadWidget::startDownloadTiles() |
218 | 262 | { |
219 | 263 | m_prefix = m_prefixInput->text(); |
... | ... | |
330 | 374 | |
331 | 375 | void DownloadWidget::startDownloadPackages() |
332 | 376 | { |
333 | | QUrl url("http://download../..."); |
334 | | QNetworkReply *reply = m_manager->get(QNetworkRequest(url)); |
335 | | connect(reply, SIGNAL(downloadProgress(qint64, qint64)), |
| 377 | QListWidgetItem *item = m_packageList->currentItem(); |
| 378 | if (!item) { |
| 379 | return; |
| 380 | } |
| 381 | |
| 382 | QString baseUrl = item->data(Qt::UserRole).toString(); |
| 383 | m_dlList << baseUrl+"Contraction Hierarchies_config"; |
| 384 | m_dlList << baseUrl+"Contraction Hierarchies_edges"; |
| 385 | m_dlList << baseUrl+"Contraction Hierarchies_names"; |
| 386 | m_dlList << baseUrl+"Contraction Hierarchies_paths"; |
| 387 | m_dlList << baseUrl+"Contraction Hierarchies_types"; |
| 388 | m_dlList << baseUrl+"GPSGrid_config"; |
| 389 | m_dlList << baseUrl+"GPSGrid_grid"; |
| 390 | m_dlList << baseUrl+"GPSGrid_index_1"; |
| 391 | m_dlList << baseUrl+"GPSGrid_index_2"; |
| 392 | m_dlList << baseUrl+"GPSGrid_index_3"; |
| 393 | m_dlList << baseUrl+"OSM Renderer_settings"; |
| 394 | m_dlList << baseUrl+"plugins.ini"; |
| 395 | m_dlList << baseUrl+"Unicode Tournament Trie_main"; |
| 396 | m_dlList << baseUrl+"Unicode Tournament Trie_sub"; |
| 397 | m_dlList << baseUrl+"Unicode Tournament Trie_ways"; |
| 398 | |
| 399 | m_currentDownload = m_manager->get(QNetworkRequest(QUrl(m_dlList.takeFirst()))); |
| 400 | connect(m_currentDownload, SIGNAL(downloadProgress(qint64, qint64)), |
336 | 401 | this, SLOT(downloadProgress(qint64, qint64))); |
| 402 | connect(m_currentDownload, SIGNAL(readReady()), |
| 403 | this, SLOT(saveDownload())); |
337 | 404 | |
338 | 405 | m_dlProgress->show(); |
339 | 406 | m_dlProgress->setValue(0); |
... | ... | |
347 | 414 | { |
348 | 415 | Q_UNUSED(reply) |
349 | 416 | |
350 | | m_dlProgress->hide(); |
351 | | m_tabWidget->setEnabled(true); |
352 | | m_startButton->setEnabled(true); |
353 | | m_backButton->setEnabled(true); |
| 417 | if (m_dlList.isEmpty()) { |
| 418 | m_dlProgress->hide(); |
| 419 | m_tabWidget->setEnabled(true); |
| 420 | m_startButton->setEnabled(true); |
| 421 | m_backButton->setEnabled(true); |
| 422 | } else { |
| 423 | QUrl url(m_dlList.takeFirst()); |
| 424 | m_currentDownload = m_manager->get(QNetworkRequest(url)); |
| 425 | connect(m_currentDownload, SIGNAL(downloadProgress(qint64, qint64)), |
| 426 | this, SLOT(downloadProgress(qint64, qint64))); |
| 427 | connect(m_currentDownload, SIGNAL(readReady()), |
| 428 | this, SLOT(saveDownload())); |
| 429 | } |
354 | 430 | } |
355 | 431 | |
356 | 432 | QString DownloadWidget::lon2string(qreal lon) |