summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-04-30 11:29:47 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2020-05-26 20:35:03 +0300
commit48ed7be0e2ef918e57f42781218a5bf7fd6fdee7 (patch)
tree78d20dfe332705f1e35262f06e0965b2743dba6e
parente45dcfe6705c61201077ea66c74d065a5b961a16 (diff)
downloadqtlocation-mapboxgl-48ed7be0e2ef918e57f42781218a5bf7fd6fdee7.tar.gz
[core] Get rid of Source::getSourceData()
and `SourceDataResult`
-rw-r--r--include/mbgl/style/source.hpp18
-rw-r--r--include/mbgl/style/source_data.hpp11
-rw-r--r--include/mbgl/style/sources/geojson_source.hpp3
-rw-r--r--include/mbgl/style/sources/image_source.hpp2
-rw-r--r--platform/default/src/mbgl/storage/offline_download.cpp11
-rw-r--r--src/mbgl/style/sources/geojson_source.cpp14
-rw-r--r--src/mbgl/style/sources/image_source.cpp15
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 {