[core] Use the ResourceTransform instead of callbacks

Based on the actor model, can be considered safer to use since
we don't need to worry about object lifetime anymore.
This commit is contained in:
Thiago Marcos P. Santos
2017-06-21 17:39:29 +03:00
parent 515ffa975d
commit ea34cb5725
5 changed files with 67 additions and 30 deletions

View File

@@ -5,6 +5,7 @@
#include <mbgl/storage/online_file_source.hpp>
#include <mbgl/storage/offline_database.hpp>
#include <mbgl/storage/offline_download.hpp>
#include <mbgl/storage/resource_transform.hpp>
#include <mbgl/util/platform.hpp>
#include <mbgl/util/url.hpp>
@@ -49,7 +50,7 @@ public:
return onlineFileSource.getAccessToken();
}
void setResourceTransform(OnlineFileSource::ResourceTransform&& transform) {
void setResourceTransform(optional<ActorRef<ResourceTransform>>&& transform) {
onlineFileSource.setResourceTransform(std::move(transform));
}
@@ -227,17 +228,8 @@ std::string DefaultFileSource::getAccessToken() {
return cachedAccessToken;
}
void DefaultFileSource::setResourceTransform(std::function<std::string(Resource::Kind, std::string&&)> transform) {
if (transform) {
auto loop = util::RunLoop::Get();
impl->actor().invoke(&Impl::setResourceTransform, [loop, transform](Resource::Kind kind_, std::string&& url_, auto callback_) {
return loop->invokeWithCallback([transform](Resource::Kind kind, std::string&& url, auto callback) {
callback(transform(kind, std::move(url)));
}, kind_, std::move(url_), callback_);
});
} else {
impl->actor().invoke(&Impl::setResourceTransform, nullptr);
}
void DefaultFileSource::setResourceTransform(optional<ActorRef<ResourceTransform>>&& transform) {
impl->actor().invoke(&Impl::setResourceTransform, std::move(transform));
}
std::unique_ptr<AsyncRequest> DefaultFileSource::request(const Resource& resource, Callback callback) {