diff options
Diffstat (limited to 'src/mbgl/sprite/sprite_store.cpp')
-rw-r--r-- | src/mbgl/sprite/sprite_store.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/mbgl/sprite/sprite_store.cpp b/src/mbgl/sprite/sprite_store.cpp index 15a345cc4d..869abab39f 100644 --- a/src/mbgl/sprite/sprite_store.cpp +++ b/src/mbgl/sprite/sprite_store.cpp @@ -5,7 +5,6 @@ #include <mbgl/storage/resource.hpp> #include <mbgl/storage/response.hpp> #include <mbgl/util/exception.hpp> -#include <mbgl/util/thread_context.hpp> #include <cassert> #include <string> @@ -25,7 +24,7 @@ SpriteStore::SpriteStore(float pixelRatio_) SpriteStore::~SpriteStore() = default; -void SpriteStore::setURL(const std::string& url) { +void SpriteStore::load(const std::string& url, FileSource& fileSource) { if (url.empty()) { // Treat a non-existent sprite as a successfully loaded empty sprite. loaded = true; @@ -34,37 +33,30 @@ void SpriteStore::setURL(const std::string& url) { loader = std::make_unique<Loader>(); - FileSource* fs = util::ThreadContext::getFileSource(); - loader->jsonRequest = fs->request(Resource::spriteJSON(url, pixelRatio), [this](Response res) { + loader->jsonRequest = fileSource.request(Resource::spriteJSON(url, pixelRatio), [this](Response res) { if (res.error) { observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); + } else if (res.notModified) { return; - } - - if (res.notModified) { - // We got the same data back as last time. Abort early. - return; - } - - if (!loader->json || *loader->json != *res.data) { + } else if (res.noContent) { + loader->json = std::make_shared<const std::string>(); + emitSpriteLoadedIfComplete(); + } else { // Only trigger a sprite loaded event we got new data. loader->json = res.data; emitSpriteLoadedIfComplete(); } }); - loader->spriteRequest = fs->request(Resource::spriteImage(url, pixelRatio), [this](Response res) { + loader->spriteRequest = fileSource.request(Resource::spriteImage(url, pixelRatio), [this](Response res) { if (res.error) { observer->onSpriteError(std::make_exception_ptr(std::runtime_error(res.error->message))); + } else if (res.notModified) { return; - } - - if (res.notModified) { - // We got the same data back as last time. Abort early. - return; - } - - if (!loader->image || *loader->image != *res.data) { + } else if (res.noContent) { + loader->image = std::make_shared<const std::string>(); + emitSpriteLoadedIfComplete(); + } else { loader->image = res.data; emitSpriteLoadedIfComplete(); } |