diff options
Diffstat (limited to 'platform/default/asset_file_source.cpp')
-rw-r--r-- | platform/default/asset_file_source.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/platform/default/asset_file_source.cpp b/platform/default/asset_file_source.cpp index 1832818378..54dbb8d0f6 100644 --- a/platform/default/asset_file_source.cpp +++ b/platform/default/asset_file_source.cpp @@ -1,4 +1,5 @@ #include <mbgl/storage/asset_file_source.hpp> +#include <mbgl/storage/file_source_request.hpp> #include <mbgl/storage/response.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/thread.hpp> @@ -8,17 +9,16 @@ #include <sys/types.h> #include <sys/stat.h> -#include <unistd.h> namespace mbgl { class AssetFileSource::Impl { public: - Impl(std::string root_) + Impl(ActorRef<Impl>, std::string root_) : root(std::move(root_)) { } - void request(const std::string& url, FileSource::Callback callback) { + void request(const std::string& url, ActorRef<FileSourceRequest> req) { std::string path; if (url.size() <= 8 || url[8] == '/') { @@ -34,7 +34,7 @@ public: struct stat buf; int result = stat(path.c_str(), &buf); - if (result == 0 && S_ISDIR(buf.st_mode)) { + if (result == 0 && (S_IFDIR & buf.st_mode)) { response.error = std::make_unique<Response::Error>(Response::Error::Reason::NotFound); } else if (result == -1 && errno == ENOENT) { response.error = std::make_unique<Response::Error>(Response::Error::Reason::NotFound); @@ -48,7 +48,7 @@ public: } } - callback(response); + req.invoke(&FileSourceRequest::setResponse, response); } private: @@ -56,15 +56,17 @@ private: }; AssetFileSource::AssetFileSource(const std::string& root) - : thread(std::make_unique<util::Thread<Impl>>( - util::ThreadContext{"AssetFileSource", util::ThreadPriority::Low}, - root)) { + : impl(std::make_unique<util::Thread<Impl>>("AssetFileSource", root)) { } AssetFileSource::~AssetFileSource() = default; std::unique_ptr<AsyncRequest> AssetFileSource::request(const Resource& resource, Callback callback) { - return thread->invokeWithCallback(&Impl::request, resource.url, callback); + auto req = std::make_unique<FileSourceRequest>(std::move(callback)); + + impl->actor().invoke(&Impl::request, resource.url, req->actor()); + + return std::move(req); } } // namespace mbgl |