diff options
Diffstat (limited to 'src/mbgl/sprite/sprite_store.cpp')
-rw-r--r-- | src/mbgl/sprite/sprite_store.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/mbgl/sprite/sprite_store.cpp b/src/mbgl/sprite/sprite_store.cpp index 0c3a7d3ba0..8f99ea7626 100644 --- a/src/mbgl/sprite/sprite_store.cpp +++ b/src/mbgl/sprite/sprite_store.cpp @@ -40,15 +40,17 @@ void SpriteStore::setURL(const std::string& url) { FileSource* fs = util::ThreadContext::getFileSource(); loader->jsonRequest = fs->request({ Resource::Kind::SpriteJSON, jsonURL }, [this, jsonURL](Response res) { - if (res.stale) { - // Only handle fresh responses. + if (res.error) { + observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); + } + + if (res.notModified) { + // We got the same data back as last time. Abort early. return; } - loader->jsonRequest = nullptr; - if (res.error) { - observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); - } else { + if (!loader->json || *loader->json != *res.data) { + // Only trigger a sprite loaded event we got new data. loader->json = res.data; emitSpriteLoadedIfComplete(); } @@ -57,15 +59,16 @@ void SpriteStore::setURL(const std::string& url) { loader->spriteRequest = fs->request({ Resource::Kind::SpriteImage, spriteURL }, [this, spriteURL](Response res) { - if (res.stale) { - // Only handle fresh responses. + if (res.error) { + observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); + } + + if (res.notModified) { + // We got the same data back as last time. Abort early. return; } - loader->spriteRequest = nullptr; - if (res.error) { - observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); - } else { + if (!loader->image || *loader->image != *res.data) { loader->image = res.data; emitSpriteLoadedIfComplete(); } @@ -79,8 +82,7 @@ void SpriteStore::emitSpriteLoadedIfComplete() { return; } - auto local = std::move(loader); - auto result = parseSprite(*local->image, *local->json); + auto result = parseSprite(*loader->image, *loader->json); if (result.is<Sprites>()) { loaded = true; setSprites(result.get<Sprites>()); |