void Map::loadTilesSync(QList<Tile> &list) { QList<Download> dl; for (int i = 0; i < list.size(); i++) { Tile &t = list[i]; QString file = tileFile(t); QFileInfo fi(file); if (!fi.exists()) dl.append(Download(tileUrl(t), file)); else loadTileFile(t, file); } if (dl.empty()) return; QEventLoop wait; connect(&Downloader::instance(), SIGNAL(finished()), &wait, SLOT(quit())); if (Downloader::instance().get(dl)) wait.exec(); for (int i = 0; i < list.size(); i++) { Tile &t = list[i]; if (t.pixmap().isNull()) { QString file = tileFile(t); QFileInfo fi(file); if (!(fi.exists() && loadTileFile(t, file))) fillTile(t); } } }
void OsmTileDownloader::download(uint32_t zoomLevel, uint32_t x, uint32_t y) { if (!tileProvider.isValid()){ emit failed(zoomLevel, x, y, false); return; } if ((int)zoomLevel > tileProvider.getMaximumZoomLevel()){ emit failed(zoomLevel, x, y, true); return; } QStringList servers = tileProvider.getServers(); if (servers.empty()){ emit failed(zoomLevel, x, y, false); return; } QString server = servers.at(serverNumber % servers.size()); QUrl tileUrl(server.arg(zoomLevel).arg(x).arg(y)); qDebug() << "Download tile " << tileUrl << " (current thread: " << QThread::currentThread() << ")"; TileCacheKey key = {zoomLevel, x, y}; requests.insert(tileUrl, key); QNetworkRequest request(tileUrl); request.setHeader(QNetworkRequest::UserAgentHeader, QString(OSMSCOUT_USER_AGENT).arg(OSMSCOUT_VERSION_STRING)); //request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); webCtrl.get(request); }
void Map::loadTilesAsync(QList<Tile> &list) { QList<Download> dl; for (int i = 0; i < list.size(); i++) { Tile &t = list[i]; QString file = tileFile(t); QFileInfo fi(file); if (!fi.exists()) { fillTile(t); dl.append(Download(tileUrl(t), file)); } else loadTileFile(t, file); } if (!dl.empty()) Downloader::instance().get(dl); }