diff --git a/libs/map/mapview_tile_cache.cpp b/libs/map/mapview_tile_cache.cpp index f40a44f..e6772ec 100644 --- a/libs/map/mapview_tile_cache.cpp +++ b/libs/map/mapview_tile_cache.cpp @@ -79,7 +79,7 @@ void MapViewTileCache::tileProviderChanged() { cache_dir.setPath(cache_root); auto * provider = parent->downloader->provider; if (provider) { - cache_dir.setPath(cache_root + "/" + provider->name()); + cache_dir.setPath(cache_root + "/" + provider->cacheDir()); } qDebug() << "[MapViewTileCache] Cache dir" << cache_dir.absolutePath(); if (!cache_dir.exists()) cache_dir.mkpath("."); diff --git a/libs/map/mapview_tile_downloader.cpp b/libs/map/mapview_tile_downloader.cpp index bc60e71..3069e57 100644 --- a/libs/map/mapview_tile_downloader.cpp +++ b/libs/map/mapview_tile_downloader.cpp @@ -50,11 +50,13 @@ void MapViewTileDownloader::clearQueue() { void MapViewTileDownloader::setTileProvider(MapViewTileProviderBase * p) { if (provider) { disconnect(provider, &MapViewTileProviderBase::tileReady, this, &MapViewTileDownloader::tileReady); + disconnect(provider, &MapViewTileProviderBase::parametersChanged, this, &MapViewTileDownloader::parametersChanged); provider->deleteLater(); } provider = p; if (provider) { connect(provider, &MapViewTileProviderBase::tileReady, this, &MapViewTileDownloader::tileReady); + connect(provider, &MapViewTileProviderBase::parametersChanged, this, &MapViewTileDownloader::parametersChanged); } parent->cache->tileProviderChanged(); } @@ -75,6 +77,11 @@ void MapViewTileDownloader::tileReady(OSM::TileIndex index, QPixmap pm) { } +void MapViewTileDownloader::parametersChanged() { + parent->cache->tileProviderChanged(); +} + + void MapViewTileDownloader::run() { while (!isInterruptionRequested()) { cond_mutex.lock(); diff --git a/libs/map/mapview_tile_downloader_p.h b/libs/map/mapview_tile_downloader_p.h index 0b0b4af..c6d8db0 100644 --- a/libs/map/mapview_tile_downloader_p.h +++ b/libs/map/mapview_tile_downloader_p.h @@ -65,6 +65,7 @@ public slots: private slots: void tileReady(OSM::TileIndex index, QPixmap pm); + void parametersChanged(); signals: void tileDone(); diff --git a/libs/map/mapview_tile_provider_base.cpp b/libs/map/mapview_tile_provider_base.cpp index 51cda86..b58b3ad 100644 --- a/libs/map/mapview_tile_provider_base.cpp +++ b/libs/map/mapview_tile_provider_base.cpp @@ -3,11 +3,17 @@ void MapViewTileProviderBase::setParameters(const PIValueTree & vt) { parameters.applyValues(vt); - applyParameters(); + applyParametersIntenal(); } void MapViewTileProviderBase::initParameters(const PIValueTree & vt) { parameters = vt; - applyParameters(); + applyParametersIntenal(); +} + + +void MapViewTileProviderBase::applyParametersIntenal() { + applyParameters(); + emit parametersChanged(); } diff --git a/libs/map/mapview_tile_provider_base.h b/libs/map/mapview_tile_provider_base.h index b0e30f3..f4f834c 100644 --- a/libs/map/mapview_tile_provider_base.h +++ b/libs/map/mapview_tile_provider_base.h @@ -40,6 +40,7 @@ public: virtual QString name() const = 0; virtual bool requestTile(OSM::TileIndex index) = 0; virtual QSize tileSize() = 0; + virtual QString cacheDir() const { return name(); } protected: void initParameters(const PIValueTree & vt); @@ -47,10 +48,12 @@ protected: virtual void applyParameters() {} private: + void applyParametersIntenal(); PIValueTree parameters; signals: void tileReady(OSM::TileIndex index, QPixmap pm); + void parametersChanged(); }; diff --git a/libs/map/mapview_tile_provider_maptiler.cpp b/libs/map/mapview_tile_provider_maptiler.cpp index e7259bb..f230d4d 100644 --- a/libs/map/mapview_tile_provider_maptiler.cpp +++ b/libs/map/mapview_tile_provider_maptiler.cpp @@ -58,6 +58,11 @@ QSize MapViewTileProvider_MapTiler::tileSize() { } +QString MapViewTileProvider_MapTiler::cacheDir() const { + return name() + "/" + tileset; +} + + void MapViewTileProvider_MapTiler::applyParameters() { url = PI2QString(getParameters().childValue("url").toString()); key = PI2QString(getParameters().childValue("key").toString()); diff --git a/libs/map/mapview_tile_provider_maptiler.h b/libs/map/mapview_tile_provider_maptiler.h index be61854..6c02a5c 100644 --- a/libs/map/mapview_tile_provider_maptiler.h +++ b/libs/map/mapview_tile_provider_maptiler.h @@ -35,6 +35,7 @@ public: QString name() const override; bool requestTile(OSM::TileIndex index) override; QSize tileSize() override; + QString cacheDir() const override; protected: void applyParameters() override;