Date:2011-03-22 15:26:48 (13 years 6 days ago)
Author:nielsk
Commit:f86e246ddbf472c3e3a7f6537f52725ede029f69
Message:add not (yet) working downloader for routing data

Files: downloadwidget.cpp (9 diffs)
downloadwidget.h (4 diffs)

Change Details

downloadwidget.cpp
2626#include <QtCore/QFile>
2727#include <QtCore/QSettings>
2828#include <QtGui/QLayout>
29#include <QtNetwork/QNetworkReply>
3029#include <QtNetwork/QNetworkRequest>
3130
3231DownloadWidget::DownloadWidget(QWidget *parent)
...... 
4039    m_startLevel(0),
4140    m_dlRect(),
4241    m_dlList(),
42    m_currentDownload(0),
4343    m_prefix("OSM"),
4444    m_up(new QLabel("N 0", this)),
4545    m_left(new QLabel("E 0", this)),
...... 
5050    m_skipExisting(new QCheckBox("S&kip already downloaded tiles", this)),
5151    m_poiType(new QComboBox(this)),
5252    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))
5456{
5557    QGridLayout *layout = new QGridLayout(this);
5658    layout->setContentsMargins(0, 0, 0, 0);
...... 
8789    label->setFrameShape(QLabel::Box);
8890    layout->addWidget(label, 1, 1, 1, 2);
8991
90    label = new QLabel("Download up to level", this);
92    label = new QLabel("Download up to level:", this);
9193    layout->addWidget(label, 3, 0, 1, 2);
9294
9395    m_levelSpinBox->setRange(0, 18);
9496    layout->addWidget(m_levelSpinBox, 3, 2, 1, 2);
9597
96    label = new QLabel("Download into directory", this);
98    label = new QLabel("Download into directory:", this);
9799    layout->addWidget(label, 4, 0, 1, 2);
98100
99101    m_prefixInput->setText(m_prefix);
...... 
138140    widget = new QWidget(this);
139141    layout = new QGridLayout(widget);
140142    layout->setContentsMargins(0, 0, 0, 0);
143    layout->setRowStretch(1, 1);
141144
142    label = new QLabel("TODO", this);
145    label = new QLabel("This Page does not work yet!!!", this);
143146    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);
145159
146160    m_tabWidget->addTab(widget, "&Routing data");
147161
...... 
204218        case POIs:
205219            replyFinishedPOIs(reply);
206220            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;
207231    }
208232    reply->deleteLater();
209233}
...... 
214238    m_dlProgress->setValue(bytesReceived);
215239}
216240
241void 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
255void DownloadWidget::updateSourceList()
256{
257    m_downloadMode = SourceList;
258    m_manager->get(QNetworkRequest(QUrl("http://host.domain.tld/path/source.list")));
259}
260
217261void DownloadWidget::startDownloadTiles()
218262{
219263    m_prefix = m_prefixInput->text();
...... 
330374
331375void DownloadWidget::startDownloadPackages()
332376{
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)),
336401            this, SLOT(downloadProgress(qint64, qint64)));
402    connect(m_currentDownload, SIGNAL(readReady()),
403            this, SLOT(saveDownload()));
337404
338405    m_dlProgress->show();
339406    m_dlProgress->setValue(0);
...... 
347414{
348415    Q_UNUSED(reply)
349416
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    }
354430}
355431
356432QString DownloadWidget::lon2string(qreal lon)
downloadwidget.h
2424#include <QtGui/QComboBox>
2525#include <QtGui/QLabel>
2626#include <QtGui/QLineEdit>
27#include <QtGui/QListWidget>
2728#include <QtGui/QProgressBar>
2829#include <QtGui/QPushButton>
2930#include <QtGui/QSpinBox>
3031#include <QtGui/QTabWidget>
3132#include <QtGui/QWidget>
3233#include <QtNetwork/QNetworkAccessManager>
34#include <QtNetwork/QNetworkReply>
3335
3436class DownloadWidget : public QWidget
3537{
...... 
4951    void startDownload();
5052    void replyFinished(QNetworkReply *reply);
5153    void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
54    void saveDownload();
55    void updateSourceList();
5256
5357private:
5458    enum DownloadMode {
5559        Tiles,
5660        POIs,
57        Packages
61        Packages,
62        SourceList
5863    };
5964
6065    void startDownloadTiles();
...... 
7681    int m_startLevel;
7782    QRectF m_dlRect;
7883    QStringList m_dlList;
84    QNetworkReply *m_currentDownload;
7985    QString m_prefix;
8086    QLabel *m_up, *m_left, *m_right, *m_bottom;
8187    QSpinBox *m_levelSpinBox;
...... 
8490    QComboBox *m_poiType;
8591    QCheckBox *m_makePOILayer;
8692    QLineEdit *m_destFilename;
93    QListWidget *m_packageList;
94    QLineEdit *m_destDir;
8795
8896};
8997

Archive Download the corresponding diff file

Branches:
master



interactive