summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2015-05-19 01:13:46 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2015-05-22 10:44:18 +0300
commitda81211feaffd89319330774b61b261b939dde33 (patch)
tree18a26cabee3d486f7684590c7b9d981c39661f4f /src
parentb304b20073556d442764696dbe5ac09d5462ada0 (diff)
downloadqtlocation-mapboxgl-da81211feaffd89319330774b61b261b939dde33.tar.gz
Add callback for error notifications on renderStill()
The callback will be called when any of the resources requested from the network failed to load. There is not recovery implemented yet, so the closest thing to reseting the Map object and reloading all the resources would be setting a new style.
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/map_context.cpp11
-rw-r--r--src/mbgl/map/map_context.hpp3
-rw-r--r--src/mbgl/map/resource_loader.cpp16
-rw-r--r--src/mbgl/map/resource_loader.hpp2
4 files changed, 30 insertions, 2 deletions
diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp
index f373274ebd..28bd8903ed 100644
--- a/src/mbgl/map/map_context.cpp
+++ b/src/mbgl/map/map_context.cpp
@@ -232,7 +232,7 @@ void MapContext::render() {
painter->render(*style, transformState, data.getAnimationTime());
if (data.mode == MapMode::Still) {
- callback(view.readStillImage());
+ callback(nullptr, view.readStillImage());
callback = nullptr;
}
@@ -274,4 +274,13 @@ void MapContext::onTileDataChanged() {
triggerUpdate();
}
+void MapContext::onResourceLoadingFailed(std::exception_ptr error) {
+ assert(Environment::currentlyOn(ThreadType::Map));
+
+ if (data.mode == MapMode::Still && callback) {
+ callback(error, nullptr);
+ callback = nullptr;
+ }
+}
+
}
diff --git a/src/mbgl/map/map_context.hpp b/src/mbgl/map/map_context.hpp
index c842454849..fb9fdb4d4b 100644
--- a/src/mbgl/map/map_context.hpp
+++ b/src/mbgl/map/map_context.hpp
@@ -43,7 +43,7 @@ public:
void resize(uint16_t width, uint16_t height, float ratio);
- using StillImageCallback = std::function<void(std::unique_ptr<const StillImage>)>;
+ using StillImageCallback = std::function<void(std::exception_ptr, std::unique_ptr<const StillImage>)>;
void renderStill(StillImageCallback callback);
void triggerUpdate(Update = Update::Nothing);
@@ -61,6 +61,7 @@ public:
// ResourceLoader::Observer implementation.
void onTileDataChanged() override;
+ void onResourceLoadingFailed(std::exception_ptr error) override;
private:
void updateTiles();
diff --git a/src/mbgl/map/resource_loader.cpp b/src/mbgl/map/resource_loader.cpp
index 2be86dc5e2..620b1b1379 100644
--- a/src/mbgl/map/resource_loader.cpp
+++ b/src/mbgl/map/resource_loader.cpp
@@ -130,4 +130,20 @@ void ResourceLoader::emitTileDataChanged() {
}
}
+void ResourceLoader::emitResourceLoadingFailed(std::exception_ptr error) {
+ assert(Environment::currentlyOn(ThreadType::Map));
+
+ try {
+ if (error) {
+ std::rethrow_exception(error);
+ }
+ } catch(const std::exception& e) {
+ Log::Error(Event::ResourceLoader, e.what());
+ }
+
+ if (observer_) {
+ observer_->onResourceLoadingFailed(error);
+ }
+}
+
}
diff --git a/src/mbgl/map/resource_loader.hpp b/src/mbgl/map/resource_loader.hpp
index 379444135e..fb05e67e1d 100644
--- a/src/mbgl/map/resource_loader.hpp
+++ b/src/mbgl/map/resource_loader.hpp
@@ -32,6 +32,7 @@ public:
virtual ~Observer() = default;
virtual void onTileDataChanged() = 0;
+ virtual void onResourceLoadingFailed(std::exception_ptr error) = 0;
};
ResourceLoader();
@@ -72,6 +73,7 @@ public:
private:
void emitTileDataChanged();
+ void emitResourceLoadingFailed(std::exception_ptr error);
bool shouldReparsePartialTiles_ = false;