summaryrefslogtreecommitdiff
path: root/src/mbgl/storage
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2019-03-19 16:57:36 +0200
committerBruno de Oliveira Abinader <bruno@mapbox.com>2019-03-20 21:30:08 +0200
commitd5868d3da822f2bf3297229bd879e76853108a63 (patch)
treeb3d28aab92b938cf541f917f1027d2bbd06d9780 /src/mbgl/storage
parentd1762d7111b39d45430bd7bb75ea60b7a5d85bd2 (diff)
downloadqtlocation-mapboxgl-d5868d3da822f2bf3297229bd879e76853108a63.tar.gz
[core] Remove file source from public Map ctor
Diffstat (limited to 'src/mbgl/storage')
-rw-r--r--src/mbgl/storage/asset_file_source.hpp2
-rw-r--r--src/mbgl/storage/file_source.cpp37
-rw-r--r--src/mbgl/storage/resource_options.cpp73
3 files changed, 111 insertions, 1 deletions
diff --git a/src/mbgl/storage/asset_file_source.hpp b/src/mbgl/storage/asset_file_source.hpp
index 5d98b4e69e..cc15dbb60b 100644
--- a/src/mbgl/storage/asset_file_source.hpp
+++ b/src/mbgl/storage/asset_file_source.hpp
@@ -10,7 +10,7 @@ template <typename T> class Thread;
class AssetFileSource : public FileSource {
public:
- AssetFileSource(const std::string& assetRoot);
+ AssetFileSource(const std::string& assetPath);
~AssetFileSource() override;
std::unique_ptr<AsyncRequest> request(const Resource&, Callback) override;
diff --git a/src/mbgl/storage/file_source.cpp b/src/mbgl/storage/file_source.cpp
new file mode 100644
index 0000000000..5854682771
--- /dev/null
+++ b/src/mbgl/storage/file_source.cpp
@@ -0,0 +1,37 @@
+#include <mbgl/storage/file_source.hpp>
+#include <mbgl/storage/resource_options.hpp>
+#include <mbgl/util/string.hpp>
+
+#include <mutex>
+#include <map>
+
+namespace mbgl {
+
+std::shared_ptr<FileSource> FileSource::getSharedFileSource(const ResourceOptions& options) {
+ static std::mutex mutex;
+ static std::map<std::string, std::weak_ptr<mbgl::FileSource>> fileSources;
+
+ std::lock_guard<std::mutex> lock(mutex);
+
+ // Purge entries no longer in use.
+ for (auto it = fileSources.begin(); it != fileSources.end();) {
+ it = it->second.expired() ? fileSources.erase(it) : ++it;
+ }
+
+ const uint64_t context = reinterpret_cast<uint64_t>(options.platformContext());
+ const std::string key = options.baseURL() + '|' + options.accessToken() + '|' + options.cachePath() + '|' + util::toString(context);
+
+ std::shared_ptr<mbgl::FileSource> fileSource;
+ auto tuple = fileSources.find(key);
+ if (tuple != fileSources.end()) {
+ fileSource = tuple->second.lock();
+ }
+
+ if (!fileSource) {
+ fileSources[key] = fileSource = createPlatformFileSource(options);
+ }
+
+ return fileSource;
+}
+
+} // namespace mbgl
diff --git a/src/mbgl/storage/resource_options.cpp b/src/mbgl/storage/resource_options.cpp
new file mode 100644
index 0000000000..ce82b51a14
--- /dev/null
+++ b/src/mbgl/storage/resource_options.cpp
@@ -0,0 +1,73 @@
+#include <mbgl/storage/resource_options.hpp>
+#include <mbgl/util/constants.hpp>
+
+namespace mbgl {
+
+class ResourceOptions::Impl {
+public:
+ std::string accessToken;
+ std::string baseURL = mbgl::util::API_BASE_URL;
+ std::string cachePath = ":memory:";
+ std::string assetPath = ".";
+ uint64_t maximumSize = mbgl::util::DEFAULT_MAX_CACHE_SIZE;
+ void* platformContext = nullptr;
+};
+
+ResourceOptions::ResourceOptions() : impl_(std::make_shared<ResourceOptions::Impl>()) {}
+ResourceOptions::~ResourceOptions() = default;
+
+ResourceOptions& ResourceOptions::withAccessToken(std::string token) {
+ impl_->accessToken = std::move(token);
+ return *this;
+}
+
+const std::string& ResourceOptions::accessToken() const {
+ return impl_->accessToken;
+}
+
+ResourceOptions& ResourceOptions::withBaseURL(std::string url) {
+ impl_->baseURL = std::move(url);
+ return *this;
+}
+
+const std::string& ResourceOptions::baseURL() const {
+ return impl_->baseURL;
+}
+
+ResourceOptions& ResourceOptions::withCachePath(std::string path) {
+ impl_->cachePath = std::move(path);
+ return *this;
+}
+
+const std::string& ResourceOptions::cachePath() const {
+ return impl_->cachePath;
+}
+
+ResourceOptions& ResourceOptions::withAssetPath(std::string path) {
+ impl_->assetPath = std::move(path);
+ return *this;
+}
+
+const std::string& ResourceOptions::assetPath() const {
+ return impl_->assetPath;
+}
+
+ResourceOptions& ResourceOptions::withMaximumCacheSize(uint64_t size) {
+ impl_->maximumSize = size;
+ return *this;
+}
+
+uint64_t ResourceOptions::maximumCacheSize() const {
+ return impl_->maximumSize;
+}
+
+ResourceOptions& ResourceOptions::withPlatformContext(void* context) {
+ impl_->platformContext = context;
+ return *this;
+}
+
+void* ResourceOptions::platformContext() const {
+ return impl_->platformContext;
+}
+
+} // namespace mbgl