summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-02-19 13:22:24 +0100
committerŁukasz Paczos <lukas.paczos@gmail.com>2019-03-13 13:04:57 +0100
commit8d3a2d98e8f285b0d861db6b099b51d552f99bc5 (patch)
tree7276727f14fecdcd7c867043f014b5a603f00831
parent8e4092c3aabb6c742cfa7639102f2491ca26ef86 (diff)
downloadqtlocation-mapboxgl-8d3a2d98e8f285b0d861db6b099b51d552f99bc5.tar.gz
[core] expose an option to change the db file path in runtime
-rw-r--r--include/mbgl/storage/default_file_source.hpp2
-rw-r--r--platform/default/include/mbgl/storage/offline_database.hpp4
-rw-r--r--platform/default/src/mbgl/storage/default_file_source.cpp8
-rw-r--r--platform/default/src/mbgl/storage/offline_database.cpp9
4 files changed, 22 insertions, 1 deletions
diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp
index 6ce7e8c6f9..5f6999e99f 100644
--- a/include/mbgl/storage/default_file_source.hpp
+++ b/include/mbgl/storage/default_file_source.hpp
@@ -47,6 +47,8 @@ public:
void setResourceTransform(optional<ActorRef<ResourceTransform>>&&);
+ void setResourceCachePath(const std::string&);
+
std::unique_ptr<AsyncRequest> request(const Resource&, Callback) override;
/*
diff --git a/platform/default/include/mbgl/storage/offline_database.hpp b/platform/default/include/mbgl/storage/offline_database.hpp
index 993f36a606..aad2778f73 100644
--- a/platform/default/include/mbgl/storage/offline_database.hpp
+++ b/platform/default/include/mbgl/storage/offline_database.hpp
@@ -43,6 +43,8 @@ public:
OfflineDatabase(std::string path, uint64_t maximumCacheSize = util::DEFAULT_MAX_CACHE_SIZE);
~OfflineDatabase();
+ void changePath(const std::string&);
+
optional<Response> get(const Resource&);
// Return value is (inserted, stored size)
@@ -112,7 +114,7 @@ private:
std::pair<int64_t, int64_t> getCompletedResourceCountAndSize(int64_t regionID);
std::pair<int64_t, int64_t> getCompletedTileCountAndSize(int64_t regionID);
- const std::string path;
+ std::string path;
std::unique_ptr<mapbox::sqlite::Database> db;
std::unordered_map<const char *, const std::unique_ptr<mapbox::sqlite::Statement>> statements;
diff --git a/platform/default/src/mbgl/storage/default_file_source.cpp b/platform/default/src/mbgl/storage/default_file_source.cpp
index cad68e7de9..32eb8b3d58 100644
--- a/platform/default/src/mbgl/storage/default_file_source.cpp
+++ b/platform/default/src/mbgl/storage/default_file_source.cpp
@@ -45,6 +45,10 @@ public:
onlineFileSource.setResourceTransform(std::move(transform));
}
+ void setResourceCachePath(const std::string& path) {
+ offlineDatabase->changePath(path);
+ }
+
void listRegions(std::function<void (expected<OfflineRegions, std::exception_ptr>)> callback) {
callback(offlineDatabase->listRegions());
}
@@ -243,6 +247,10 @@ void DefaultFileSource::setResourceTransform(optional<ActorRef<ResourceTransform
impl->actor().invoke(&Impl::setResourceTransform, std::move(transform));
}
+void DefaultFileSource::setResourceCachePath(const std::string& path) {
+ impl->actor().invoke(&Impl::setResourceCachePath, path);
+}
+
std::unique_ptr<AsyncRequest> DefaultFileSource::request(const Resource& resource, Callback callback) {
auto req = std::make_unique<FileSourceRequest>(std::move(callback));
diff --git a/platform/default/src/mbgl/storage/offline_database.cpp b/platform/default/src/mbgl/storage/offline_database.cpp
index 7732076991..6111e91e7e 100644
--- a/platform/default/src/mbgl/storage/offline_database.cpp
+++ b/platform/default/src/mbgl/storage/offline_database.cpp
@@ -78,6 +78,15 @@ void OfflineDatabase::initialize() {
}
}
+void OfflineDatabase::changePath(const std::string& path_) {
+ Log::Info(Event::Database, "Changing the database path.");
+
+ statements.clear();
+ db.reset();
+ path = path_;
+ initialize();
+}
+
void OfflineDatabase::handleError(const mapbox::sqlite::Exception& ex, const char* action) {
if (ex.code == mapbox::sqlite::ResultCode::NotADB ||
ex.code == mapbox::sqlite::ResultCode::Corrupt ||