summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-07-27 15:48:52 +0200
committerKonstantin Käfer <mail@kkaefer.com>2017-07-27 15:48:52 +0200
commit9af44b75120ad079ec7a15498b6213c5baae52da (patch)
tree5a65cc04f4540d8f1eed246791c60b9f01a2e7ca
parentdf24499fb1cdd400a2fc83f3bc571b2147a880da (diff)
downloadqtlocation-mapboxgl-9af44b75120ad079ec7a15498b6213c5baae52da.tar.gz
[core] make GeometryTile constructor + setData/setError protected
-rw-r--r--cmake/core-files.cmake1
-rw-r--r--src/mbgl/annotation/annotation_tile.cpp4
-rw-r--r--src/mbgl/annotation/annotation_tile.hpp2
-rw-r--r--src/mbgl/tile/geojson_tile.cpp2
-rw-r--r--src/mbgl/tile/geometry_tile.hpp3
-rw-r--r--src/mbgl/tile/raster_tile.cpp9
-rw-r--r--src/mbgl/tile/raster_tile.hpp5
-rw-r--r--src/mbgl/tile/tile_loader_impl.hpp10
-rw-r--r--src/mbgl/tile/vector_tile.cpp9
-rw-r--r--src/mbgl/tile/vector_tile.hpp5
10 files changed, 38 insertions, 12 deletions
diff --git a/cmake/core-files.cmake b/cmake/core-files.cmake
index b812753563..0b4a0b6556 100644
--- a/cmake/core-files.cmake
+++ b/cmake/core-files.cmake
@@ -311,6 +311,7 @@ set(MBGL_CORE_FILES
include/mbgl/storage/offline.hpp
include/mbgl/storage/online_file_source.hpp
include/mbgl/storage/resource.hpp
+ include/mbgl/storage/resource_error.hpp
include/mbgl/storage/resource_kind.hpp
include/mbgl/storage/resource_status.hpp
include/mbgl/storage/resource_transform.hpp
diff --git a/src/mbgl/annotation/annotation_tile.cpp b/src/mbgl/annotation/annotation_tile.cpp
index 0596d60f4f..f2520b75c3 100644
--- a/src/mbgl/annotation/annotation_tile.cpp
+++ b/src/mbgl/annotation/annotation_tile.cpp
@@ -22,6 +22,10 @@ AnnotationTile::~AnnotationTile() {
void AnnotationTile::setNecessity(Necessity) {
}
+void AnnotationTile::setData(std::unique_ptr<const GeometryTileData> data_) {
+ GeometryTile::setData(std::move(data_));
+}
+
class AnnotationTileFeatureData {
public:
AnnotationTileFeatureData(const AnnotationID id_,
diff --git a/src/mbgl/annotation/annotation_tile.hpp b/src/mbgl/annotation/annotation_tile.hpp
index 88505c50e3..d464961590 100644
--- a/src/mbgl/annotation/annotation_tile.hpp
+++ b/src/mbgl/annotation/annotation_tile.hpp
@@ -16,6 +16,8 @@ public:
void setNecessity(Necessity) final;
+ void setData(std::unique_ptr<const GeometryTileData>);
+
private:
AnnotationManager& annotationManager;
};
diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp
index d5e2e14e54..6b0cd8f947 100644
--- a/src/mbgl/tile/geojson_tile.cpp
+++ b/src/mbgl/tile/geojson_tile.cpp
@@ -106,7 +106,7 @@ GeoJSONTile::GeoJSONTile(const OverscaledTileID& overscaledTileID,
}
void GeoJSONTile::updateData(mapbox::geometry::feature_collection<int16_t> features) {
- setData(std::make_unique<GeoJSONTileData>(std::move(features)));
+ GeometryTile::setData(std::make_unique<GeoJSONTileData>(std::move(features)));
}
void GeoJSONTile::setNecessity(Necessity) {}
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index 7088637a30..b9c05f7ad2 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -27,7 +27,7 @@ class GlyphAtlas;
class ImageAtlas;
class GeometryTile : public Tile, public GlyphRequestor, ImageRequestor {
-public:
+protected:
GeometryTile(const OverscaledTileID&,
std::string sourceID,
const TileParameters&);
@@ -37,6 +37,7 @@ public:
void setError(std::exception_ptr);
void setData(std::unique_ptr<const GeometryTileData>);
+public:
void setPlacementConfig(const PlacementConfig&) override;
void setLayers(const std::vector<Immutable<style::Layer::Impl>>&) override;
diff --git a/src/mbgl/tile/raster_tile.cpp b/src/mbgl/tile/raster_tile.cpp
index 629ab9cc1f..5906b0f6a0 100644
--- a/src/mbgl/tile/raster_tile.cpp
+++ b/src/mbgl/tile/raster_tile.cpp
@@ -28,7 +28,8 @@ void RasterTile::cancel() {
}
// Called instead of setData() when the data source returns an error while loading this tile.
-void RasterTile::setError(std::exception_ptr err) {
+void RasterTile::setError(std::exception_ptr err, const bool complete) {
+ (void)complete;
loaded = true;
renderable = false;
observer->onTileError(*this, err);
@@ -37,8 +38,10 @@ void RasterTile::setError(std::exception_ptr err) {
// Called when new data is available for this tile. It can be called even if there is already data
// in this tile.
void RasterTile::setData(std::shared_ptr<const std::string> data,
- optional<Timestamp> modified_,
- optional<Timestamp> expires_) {
+ const optional<Timestamp> modified_,
+ const optional<Timestamp> expires_,
+ const bool complete) {
+ (void)complete;
modified = modified_;
expires = expires_;
diff --git a/src/mbgl/tile/raster_tile.hpp b/src/mbgl/tile/raster_tile.hpp
index 9363ab02b3..b92637b711 100644
--- a/src/mbgl/tile/raster_tile.hpp
+++ b/src/mbgl/tile/raster_tile.hpp
@@ -24,10 +24,11 @@ public:
void setNecessity(Necessity) final;
- void setError(std::exception_ptr);
+ void setError(std::exception_ptr, bool complete);
void setData(std::shared_ptr<const std::string> data,
optional<Timestamp> modified_,
- optional<Timestamp> expires_);
+ optional<Timestamp> expires_,
+ bool complete);
void cancel() override;
diff --git a/src/mbgl/tile/tile_loader_impl.hpp b/src/mbgl/tile/tile_loader_impl.hpp
index 65df200088..5bf9988485 100644
--- a/src/mbgl/tile/tile_loader_impl.hpp
+++ b/src/mbgl/tile/tile_loader_impl.hpp
@@ -2,6 +2,7 @@
#include <mbgl/tile/tile_loader.hpp>
#include <mbgl/storage/file_source.hpp>
+#include <mbgl/storage/resource_error.hpp>
#include <mbgl/renderer/tile_parameters.hpp>
#include <mbgl/util/tileset.hpp>
@@ -89,8 +90,11 @@ void TileLoader<T>::makeOptional() {
template <typename T>
void TileLoader<T>::loadedData(const Response& res) {
- if (res.error && res.error->status != ResourceStatus::NotFoundError) {
- tile.setError(std::make_exception_ptr(std::runtime_error(res.error->message)));
+ const bool complete = necessity == Necessity::Optional || resource.necessity == Necessity::Required;
+ if (res.error) {
+ tile.setError(std::make_exception_ptr(util::ResourceError(res.error->message, resource.kind,
+ res.error->status, resource.url)),
+ complete);
} else if (res.notModified) {
resource.priorExpires = res.expires;
// Do not notify the tile; when we get this message, it already has the current
@@ -99,7 +103,7 @@ void TileLoader<T>::loadedData(const Response& res) {
resource.priorModified = res.modified;
resource.priorExpires = res.expires;
resource.priorEtag = res.etag;
- tile.setData(res.noContent ? nullptr : res.data, res.modified, res.expires);
+ tile.setData(res.noContent ? nullptr : res.data, res.modified, res.expires, complete);
}
}
diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp
index e2e700b7b7..f03f836851 100644
--- a/src/mbgl/tile/vector_tile.cpp
+++ b/src/mbgl/tile/vector_tile.cpp
@@ -16,9 +16,16 @@ void VectorTile::setNecessity(Necessity necessity) {
loader.setNecessity(necessity);
}
+void VectorTile::setError(std::exception_ptr err, const bool complete) {
+ (void)complete;
+ GeometryTile::setError(err);
+}
+
void VectorTile::setData(std::shared_ptr<const std::string> data_,
optional<Timestamp> modified_,
- optional<Timestamp> expires_) {
+ optional<Timestamp> expires_,
+ const bool complete) {
+ (void)complete;
modified = modified_;
expires = expires_;
diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp
index 566cde4f37..c34fa4d763 100644
--- a/src/mbgl/tile/vector_tile.hpp
+++ b/src/mbgl/tile/vector_tile.hpp
@@ -16,9 +16,12 @@ public:
const Tileset&);
void setNecessity(Necessity) final;
+
+ void setError(std::exception_ptr, bool complete);
void setData(std::shared_ptr<const std::string> data,
optional<Timestamp> modified,
- optional<Timestamp> expires);
+ optional<Timestamp> expires,
+ bool complete);
private:
TileLoader<VectorTile> loader;