diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2015-05-27 16:00:52 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2015-05-28 09:33:08 +0300 |
commit | 4819379020f88d2cf34774dfb6aca0ca16aa53ca (patch) | |
tree | ce4395ad9d1873aa31e8742f40f972fa07673add /src | |
parent | 9dd8d26729eba5ecb8d788b8ba2150cf5b4bdeca (diff) | |
download | qtlocation-mapboxgl-4819379020f88d2cf34774dfb6aca0ca16aa53ca.tar.gz |
Notify sprite parsing errors
Emit a signal when the JSON or the sprite image was not
parsed correctly.
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/sprite.cpp | 25 | ||||
-rw-r--r-- | src/mbgl/map/sprite.hpp | 4 |
2 files changed, 19 insertions, 10 deletions
diff --git a/src/mbgl/map/sprite.cpp b/src/mbgl/map/sprite.cpp index fd3615f912..d5af3e1d1d 100644 --- a/src/mbgl/map/sprite.cpp +++ b/src/mbgl/map/sprite.cpp @@ -45,14 +45,13 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_) jsonRequest = nullptr; if (res.status == Response::Successful) { body = res.data; - parseJSON(); + parseJSON(jsonURL); } else { std::stringstream message; message << "Failed to load [" << jsonURL << "]: " << res.message; emitSpriteLoadingFailed(message.str()); return; } - loadedJSON = true; emitSpriteLoadedIfComplete(); }); @@ -60,14 +59,13 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_) spriteRequest = nullptr; if (res.status == Response::Successful) { image = res.data; - parseImage(); + parseImage(spriteURL); } else { std::stringstream message; message << "Failed to load [" << spriteURL << "]: " << res.message; emitSpriteLoadingFailed(message.str()); return; } - loadedImage = true; emitSpriteLoadedIfComplete(); }); } @@ -105,21 +103,29 @@ bool Sprite::hasPixelRatio(float ratio) const { return pixelRatio == (ratio > 1 ? 2 : 1); } -void Sprite::parseImage() { +void Sprite::parseImage(const std::string& spriteURL) { raster = std::make_unique<util::Image>(image); if (!*raster) { raster.reset(); + std::stringstream message; + message << "Failed to parse [" << spriteURL << "]"; + emitSpriteLoadingFailed(message.str()); + return; } + image.clear(); + loadedImage = true; } -void Sprite::parseJSON() { +void Sprite::parseJSON(const std::string& jsonURL) { rapidjson::Document d; d.Parse<0>(body.c_str()); body.clear(); if (d.HasParseError()) { - Log::Warning(Event::Sprite, "sprite JSON is invalid"); + std::stringstream message; + message << "Failed to parse [" << jsonURL << "]: " << d.GetErrorOffset() << " - " << d.GetParseError(); + emitSpriteLoadingFailed(message.str()); } else if (d.IsObject()) { for (rapidjson::Value::ConstMemberIterator itr = d.MemberBegin(); itr != d.MemberEnd(); ++itr) { const std::string& name = itr->name.GetString(); @@ -142,8 +148,11 @@ void Sprite::parseJSON() { pos.emplace(name, SpritePosition { x, y, width, height, spritePixelRatio, sdf }); } } + loadedJSON = true; } else { - Log::Warning(Event::Sprite, "sprite JSON root is not an object"); + std::stringstream message; + message << "Failed to parse [" << jsonURL << "]: Root is not an object"; + emitSpriteLoadingFailed(message.str()); } } diff --git a/src/mbgl/map/sprite.hpp b/src/mbgl/map/sprite.hpp index 13cfbe2d84..b0fda30018 100644 --- a/src/mbgl/map/sprite.hpp +++ b/src/mbgl/map/sprite.hpp @@ -59,8 +59,8 @@ private: void emitSpriteLoadedIfComplete(); void emitSpriteLoadingFailed(const std::string& message); - void parseJSON(); - void parseImage(); + void parseJSON(const std::string& jsonURL); + void parseImage(const std::string& spriteURL); std::string body; std::string image; |