summaryrefslogtreecommitdiff
path: root/platform/default/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/src')
-rw-r--r--platform/default/src/mbgl/storage/default_file_source.cpp8
-rw-r--r--platform/default/src/mbgl/storage/offline_database.cpp30
2 files changed, 28 insertions, 10 deletions
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..752f5ac20a 100644
--- a/platform/default/src/mbgl/storage/offline_database.cpp
+++ b/platform/default/src/mbgl/storage/offline_database.cpp
@@ -27,16 +27,7 @@ OfflineDatabase::OfflineDatabase(std::string path_, uint64_t maximumCacheSize_)
}
OfflineDatabase::~OfflineDatabase() {
- // Deleting these SQLite objects may result in exceptions, but we're in a destructor, so we
- // can't throw anything.
- try {
- statements.clear();
- db.reset();
- } catch (const util::IOException& ex) {
- handleError(ex, "close database");
- } catch (const mapbox::sqlite::Exception& ex) {
- handleError(ex, "close database");
- }
+ cleanup();
}
void OfflineDatabase::initialize() {
@@ -78,6 +69,25 @@ void OfflineDatabase::initialize() {
}
}
+void OfflineDatabase::changePath(const std::string& path_) {
+ Log::Info(Event::Database, "Changing the database path.");
+ cleanup();
+ path = path_;
+ initialize();
+}
+
+void OfflineDatabase::cleanup() {
+ // Deleting these SQLite objects may result in exceptions
+ try {
+ statements.clear();
+ db.reset();
+ } catch (const util::IOException& ex) {
+ handleError(ex, "close database");
+ } catch (const mapbox::sqlite::Exception& ex) {
+ handleError(ex, "close database");
+ }
+}
+
void OfflineDatabase::handleError(const mapbox::sqlite::Exception& ex, const char* action) {
if (ex.code == mapbox::sqlite::ResultCode::NotADB ||
ex.code == mapbox::sqlite::ResultCode::Corrupt ||