summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2015-05-27 16:00:52 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2015-05-28 09:33:08 +0300
commit4819379020f88d2cf34774dfb6aca0ca16aa53ca (patch)
treece4395ad9d1873aa31e8742f40f972fa07673add /src
parent9dd8d26729eba5ecb8d788b8ba2150cf5b4bdeca (diff)
downloadqtlocation-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.cpp25
-rw-r--r--src/mbgl/map/sprite.hpp4
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;