diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-30 11:29:47 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2020-05-26 20:35:03 +0300 |
commit | 48ed7be0e2ef918e57f42781218a5bf7fd6fdee7 (patch) | |
tree | 78d20dfe332705f1e35262f06e0965b2743dba6e | |
parent | e45dcfe6705c61201077ea66c74d065a5b961a16 (diff) | |
download | qtlocation-mapboxgl-48ed7be0e2ef918e57f42781218a5bf7fd6fdee7.tar.gz |
[core] Get rid of Source::getSourceData()
and `SourceDataResult`
-rw-r--r-- | include/mbgl/style/source.hpp | 18 | ||||
-rw-r--r-- | include/mbgl/style/source_data.hpp | 11 | ||||
-rw-r--r-- | include/mbgl/style/sources/geojson_source.hpp | 3 | ||||
-rw-r--r-- | include/mbgl/style/sources/image_source.hpp | 2 | ||||
-rw-r--r-- | platform/default/src/mbgl/storage/offline_download.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source.cpp | 14 | ||||
-rw-r--r-- | src/mbgl/style/sources/image_source.cpp | 15 |
7 files changed, 32 insertions, 42 deletions
diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index ceec12149a..e664467597 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -2,6 +2,7 @@ #include <mapbox/std/weak.hpp> #include <mapbox/util/type_wrapper.hpp> +#include <mbgl/storage/resource.hpp> #include <mbgl/style/source_data.hpp> #include <mbgl/style/source_parameters.hpp> #include <mbgl/style/types.hpp> @@ -94,10 +95,21 @@ public: virtual void setSourceData(SourceData) {} - virtual SourceDataResult getSourceData() const { return {}; } - + /** + * @brief Returns resource for loading, if required by this source; returns `nullopt` otherwise. + * + * @return optional<Resource> + */ + virtual optional<Resource> getResource() const { return nullopt; } + // TODO: Convert below to + // `virtual const Tileset* getTileset() const;` virtual const variant<std::string, Tileset>* getURLOrTileset() const { return nullptr; } - + /** + * @brief Returns the GeoJSON data, if this source supports GeoJSON format; returns `nullptr` otherwise. + * + * @return const GeoJSONData* + */ + virtual const GeoJSONData* getGeoJSONData() const { return nullptr; } virtual void setSourceParameters(SourceParameters) {} virtual void invalidateTile(const CanonicalTileID&) {} diff --git a/include/mbgl/style/source_data.hpp b/include/mbgl/style/source_data.hpp index 366adff0df..2095e75cf8 100644 --- a/include/mbgl/style/source_data.hpp +++ b/include/mbgl/style/source_data.hpp @@ -24,16 +24,5 @@ struct SourceData { std::shared_ptr<GeoJSONData> geoJSONData; }; -struct SourceDataResult { - SourceDataResult() = default; - explicit SourceDataResult(const std::string& url_) : url(&url_) {} - explicit SourceDataResult(std::weak_ptr<PremultipliedImage>& image_) : image(std::move(image_)) {} - explicit SourceDataResult(std::weak_ptr<GeoJSONData> data) : geoJSONData(std::move(data)) {} - - const std::string* url = nullptr; - std::weak_ptr<const PremultipliedImage> image; - std::weak_ptr<const GeoJSONData> geoJSONData; -}; - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/sources/geojson_source.hpp b/include/mbgl/style/sources/geojson_source.hpp index 7d8cc8a013..34848298bf 100644 --- a/include/mbgl/style/sources/geojson_source.hpp +++ b/include/mbgl/style/sources/geojson_source.hpp @@ -65,8 +65,9 @@ public: void setGeoJSON(const GeoJSON&); void setGeoJSONData(std::shared_ptr<GeoJSONData>); void setSourceData(SourceData data) override; + optional<Resource> getResource() const override; + const GeoJSONData* getGeoJSONData() const override; - SourceDataResult getSourceData() const override; optional<std::string> getURL() const; const GeoJSONOptions& getOptions() const; diff --git a/include/mbgl/style/sources/image_source.hpp b/include/mbgl/style/sources/image_source.hpp index 5d2e72027f..cfe5a6521f 100644 --- a/include/mbgl/style/sources/image_source.hpp +++ b/include/mbgl/style/sources/image_source.hpp @@ -20,7 +20,7 @@ public: void setURL(const std::string& url); void setImage(PremultipliedImage&&); void setSourceData(SourceData) override; - SourceDataResult getSourceData() const override; + optional<Resource> getResource() const override; void setCoordinates(const std::array<LatLng, 4>&); std::array<LatLng, 4> getCoordinates() const; diff --git a/platform/default/src/mbgl/storage/offline_download.cpp b/platform/default/src/mbgl/storage/offline_download.cpp index a2c0db10a4..59ffd87292 100644 --- a/platform/default/src/mbgl/storage/offline_download.cpp +++ b/platform/default/src/mbgl/storage/offline_download.cpp @@ -169,7 +169,7 @@ OfflineRegionStatus OfflineDownload::getStatus() const { auto urlOrTileSet = source->getURLOrTileset(); if (urlOrTileSet) { handleTiledSource(*urlOrTileSet); - } else if (source->getSourceData().url) { + } else if (source->getResource()) { result->requiredResourceCount += 1; } } @@ -240,13 +240,8 @@ void OfflineDownload::activateDownload() { auto urlOrTileSet = source->getURLOrTileset(); if (urlOrTileSet) { handleTiledSource(std::move(source), *urlOrTileSet); - } else { - auto sourceData = source->getSourceData(); - if (sourceData.url && source->getTypeInfo() == ImageSource::Impl::staticTypeInfo()) { - queueResource(Resource::image(*sourceData.url)); - } else if (sourceData.url && source->getTypeInfo() == GeoJSONSource::Impl::staticTypeInfo()) { - queueResource(Resource::source(*sourceData.url)); - } + } else if (auto resource = source->getResource()) { + queueResource(std::move(*resource)); } } diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp index 8bca19af35..5d7605d754 100644 --- a/src/mbgl/style/sources/geojson_source.cpp +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -71,12 +71,14 @@ void GeoJSONSource::setSourceData(SourceData data) { } } -SourceDataResult GeoJSONSource::getSourceData() const { - SourceDataResult result{impl().getData()}; - if (url) { - result.url = &*url; - } - return result; +optional<Resource> GeoJSONSource::getResource() const { + if (!url) return nullopt; + return Resource::source(*url); +} + +const GeoJSONData* GeoJSONSource::getGeoJSONData() const { + auto data = impl().getData().lock(); + return data.get(); } optional<std::string> GeoJSONSource::getURL() const { diff --git a/src/mbgl/style/sources/image_source.cpp b/src/mbgl/style/sources/image_source.cpp index a1bc719c0c..7b62c6fb9d 100644 --- a/src/mbgl/style/sources/image_source.cpp +++ b/src/mbgl/style/sources/image_source.cpp @@ -58,18 +58,9 @@ void ImageSource::setSourceData(SourceData data) { } } -SourceDataResult ImageSource::getSourceData() const { - SourceDataResult result{}; - if (url) { - result.url = &*url; - } - - auto image = impl().getImage(); - if (image) { - result.image = image; - } - - return result; +optional<Resource> ImageSource::getResource() const { + if (!url) return nullopt; + return Resource::image(*url); } optional<std::string> ImageSource::getURL() const { |