diff options
author | Łukasz Paczos <lukas.paczos@gmail.com> | 2019-02-19 13:22:24 +0100 |
---|---|---|
committer | Łukasz Paczos <lukasz.paczos@mapbox.com> | 2019-03-13 18:28:04 +0100 |
commit | 3f7b70fdb0e40d0cbbaea17505878c72491e3cd2 (patch) | |
tree | dbbc7be080142263797bafbff5c4b950c615dc90 /platform/default/src/mbgl | |
parent | 5e58a0d81d702a543e898b489ead044a630229a0 (diff) | |
download | qtlocation-mapboxgl-3f7b70fdb0e40d0cbbaea17505878c72491e3cd2.tar.gz |
[core] expose an option to change the db file path in runtime
Diffstat (limited to 'platform/default/src/mbgl')
-rw-r--r-- | platform/default/src/mbgl/storage/default_file_source.cpp | 8 | ||||
-rw-r--r-- | platform/default/src/mbgl/storage/offline_database.cpp | 30 |
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 || |