From 86c8446d3a4390ff6577d070ac8b5fa3ad3c5cd1 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 11 Jan 2016 12:52:41 -0800 Subject: [core] Simplify asset:// implementation * Move asset:// URL handling to DefaultFileSource. * AssetFileSource implements FileSource interface and follows familiar implementation patterns. * Move default implementation to platform/default, zip implementation to platform/android. * Don't bother with modified / expires / etag -- assets are not cached so it doesn't matter. * Don't bother with interleaving individual IO calls on the implementation thread. That adds a lot of complexity for very little benefit. --- platform/default/default_file_source.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'platform/default/default_file_source.cpp') diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index d2bbce6002..8f2f024a11 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -1,16 +1,32 @@ #include +#include #include #include +#include +#include + +namespace { + +const std::string assetProtocol = "asset://"; + +bool isAssetURL(const std::string& url) { + return std::equal(assetProtocol.begin(), assetProtocol.end(), url.begin()); +} + +} // namespace + namespace mbgl { class DefaultFileSource::Impl { public: - Impl(const std::string& cachePath, const std::string& root) - : cache(SharedSQLiteCache::get(cachePath)), - onlineFileSource(cache.get(), root) { + Impl(const std::string& cachePath, const std::string& assetRoot) + : assetFileSource(assetRoot), + cache(SharedSQLiteCache::get(cachePath)), + onlineFileSource(cache.get()) { } + AssetFileSource assetFileSource; std::shared_ptr cache; OnlineFileSource onlineFileSource; }; @@ -38,7 +54,11 @@ void DefaultFileSource::setMaximumCacheEntrySize(uint64_t size) { } std::unique_ptr DefaultFileSource::request(const Resource& resource, Callback callback) { - return impl->onlineFileSource.request(resource, callback); + if (isAssetURL(resource.url)) { + return impl->assetFileSource.request(resource, callback); + } else { + return impl->onlineFileSource.request(resource, callback); + } } } // namespace mbgl -- cgit v1.2.1