summaryrefslogtreecommitdiff
path: root/src/mbgl/map
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <ander.deoliveira@mapbox.com>2019-02-22 09:31:21 +0200
committerAnder Conselvan de Oliveira <ander.deoliveira@mapbox.com>2019-03-13 11:58:27 +0200
commit7d1911572000d1353c1c0109402431323fcd8639 (patch)
tree4881a1e159415cd796e255bec951a7bb32b23ee8 /src/mbgl/map
parent565792606d5d03d0cc9889f112bb50345c899005 (diff)
downloadqtlocation-mapboxgl-7d1911572000d1353c1c0109402431323fcd8639.tar.gz
[core] Don't use exceptions in MapObserver::onDidFailLoadingMap
Using different exception pointers to specify the loading failure makes an awkward API. Most users rethrow the exception only to figure out what type of error happened so it can be reported properly. So replace the exception pointer with a enum an string description of the failure.
Diffstat (limited to 'src/mbgl/map')
-rw-r--r--src/mbgl/map/map_impl.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp
index fc67d3cf56..863604f99c 100644
--- a/src/mbgl/map/map_impl.cpp
+++ b/src/mbgl/map/map_impl.cpp
@@ -2,6 +2,7 @@
#include <mbgl/map/map_impl.hpp>
#include <mbgl/renderer/update_parameters.hpp>
#include <mbgl/style/style_impl.hpp>
+#include <mbgl/util/exception.hpp>
namespace mbgl {
@@ -97,7 +98,26 @@ void Map::Impl::onStyleLoaded() {
}
void Map::Impl::onStyleError(std::exception_ptr error) {
- observer.onDidFailLoadingMap(error);
+ MapLoadError type;
+ std::string description;
+
+ try {
+ std::rethrow_exception(error);
+ } catch (const mbgl::util::StyleParseException& e) {
+ type = MapLoadError::StyleParseError;
+ description = e.what();
+ } catch (const mbgl::util::StyleLoadException& e) {
+ type = MapLoadError::StyleLoadError;
+ description = e.what();
+ } catch (const mbgl::util::NotFoundException& e) {
+ type = MapLoadError::NotFoundError;
+ description = e.what();
+ } catch (const std::exception& e) {
+ type = MapLoadError::UnknownError;
+ description = e.what();
+ }
+
+ observer.onDidFailLoadingMap(type, description);
}
#pragma mark - Map::Impl RendererObserver