From 750cfb6f581918512ea8ed87e3f93afbcfee5f60 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 3 Apr 2015 17:10:54 -0700 Subject: [PATCH] Remove Map dependency from Source::load --- src/mbgl/map/map.cpp | 5 ++++- src/mbgl/map/source.cpp | 10 ++++++---- src/mbgl/map/source.hpp | 6 +++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 5db4d7e51..5d8bf4547 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -741,7 +741,10 @@ void Map::loadStyleJSON(const std::string& json, const std::string& base) { glyphStore->setURL(glyphURL); for (const auto& source : style->sources) { - source->load(*this, *env); + source->load(getAccessToken(), *env, [this]() { + assert(Environment::currentlyOn(ThreadType::Map)); + triggerUpdate(); + }); } triggerUpdate(Update::Zoom); diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp index c8ee0ee3e..4db7f466a 100644 --- a/src/mbgl/map/source.cpp +++ b/src/mbgl/map/source.cpp @@ -102,7 +102,9 @@ Source::Source() // Note: This is a separate function that must be called exactly once after creation // The reason this isn't part of the constructor is that calling shared_from_this() in // the constructor fails. -void Source::load(Map &map, Environment &env) { +void Source::load(const std::string& accessToken, + Environment& env, + std::function callback) { if (info.url.empty()) { loaded = true; return; @@ -110,8 +112,8 @@ void Source::load(Map &map, Environment &env) { util::ptr source = shared_from_this(); - const std::string url = util::mapbox::normalizeSourceURL(info.url, map.getAccessToken()); - env.request({ Resource::Kind::JSON, url }, [source, &map](const Response &res) { + const std::string url = util::mapbox::normalizeSourceURL(info.url, accessToken); + env.request({ Resource::Kind::JSON, url }, [source, callback](const Response &res) { if (res.status != Response::Successful) { Log::Warning(Event::General, "Failed to load source TileJSON: %s", res.message.c_str()); return; @@ -128,7 +130,7 @@ void Source::load(Map &map, Environment &env) { source->info.parseTileJSONProperties(d); source->loaded = true; - map.triggerUpdate(); + callback(); }); } diff --git a/src/mbgl/map/source.hpp b/src/mbgl/map/source.hpp index b683f44a2..636b46300 100644 --- a/src/mbgl/map/source.hpp +++ b/src/mbgl/map/source.hpp @@ -51,9 +51,13 @@ class Source : public std::enable_shared_from_this, private util::noncop public: Source(); - void load(Map &, Environment &); + void load(const std::string& accessToken, + Environment&, + std::function callback); + void update(Map &, uv::worker &, util::ptr