diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-11-25 12:18:32 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-12-02 13:46:51 +0200 |
commit | 4c49f0c9db68fe998e83ac7a0f3d095c3d2ffed1 (patch) | |
tree | 04f7028328f42ca04916c4a4629b4c7038a71640 /platform/default | |
parent | 0ec01356d854caf3159e0eec6d4fbdd3d2200359 (diff) | |
download | qtlocation-mapboxgl-4c49f0c9db68fe998e83ac7a0f3d095c3d2ffed1.tar.gz |
[core] Introduce OfflineDatabase::runPackDatabaseAutomatically() API
- added a unit test
- Updated inline comments in default_file_source.hpp
Diffstat (limited to 'platform/default')
3 files changed, 18 insertions, 12 deletions
diff --git a/platform/default/include/mbgl/storage/offline_database.hpp b/platform/default/include/mbgl/storage/offline_database.hpp index ac997bf6ad..67a19fcf26 100644 --- a/platform/default/include/mbgl/storage/offline_database.hpp +++ b/platform/default/include/mbgl/storage/offline_database.hpp @@ -74,7 +74,7 @@ public: expected<OfflineRegionMetadata, std::exception_ptr> updateMetadata(const int64_t regionID, const OfflineRegionMetadata&); - std::exception_ptr deleteRegion(OfflineRegion&&, bool pack = true); + std::exception_ptr deleteRegion(OfflineRegion&&); std::exception_ptr invalidateRegion(int64_t regionID); // Return value is (response, stored size) @@ -94,6 +94,7 @@ public: bool exceedsOfflineMapboxTileCountLimit(const Resource&); void markUsedResources(int64_t regionID, const std::list<Resource>&); std::exception_ptr pack(); + void runPackDatabaseAutomatically(bool autopack_) { autopack = autopack_; } private: void initialize(); @@ -149,6 +150,7 @@ private: optional<uint64_t> offlineMapboxTileCount; bool evict(uint64_t neededFreeSize); + bool autopack = true; }; } // namespace mbgl diff --git a/platform/default/src/mbgl/storage/default_file_source.cpp b/platform/default/src/mbgl/storage/default_file_source.cpp index 36acb748de..e6cdb411bb 100644 --- a/platform/default/src/mbgl/storage/default_file_source.cpp +++ b/platform/default/src/mbgl/storage/default_file_source.cpp @@ -82,9 +82,9 @@ public: } } - void deleteRegion(OfflineRegion&& region, std::function<void(std::exception_ptr)> callback, bool pack) { + void deleteRegion(OfflineRegion&& region, std::function<void(std::exception_ptr)> callback) { downloads.erase(region.getID()); - callback(offlineDatabase->deleteRegion(std::move(region), pack)); + callback(offlineDatabase->deleteRegion(std::move(region))); } void invalidateRegion(int64_t regionID, std::function<void (std::exception_ptr)> callback) { @@ -208,6 +208,8 @@ public: void packDatabase(std::function<void(std::exception_ptr)> callback) { callback(offlineDatabase->pack()); } + void runPackDatabaseAutomatically(bool autopack) { offlineDatabase->runPackDatabaseAutomatically(autopack); } + private: expected<OfflineDownload*, std::exception_ptr> getDownload(int64_t regionID) { auto it = downloads.find(regionID); @@ -316,10 +318,8 @@ void DefaultFileSource::updateOfflineMetadata(const int64_t regionID, impl->actor().invoke(&Impl::updateMetadata, regionID, metadata, callback); } -void DefaultFileSource::deleteOfflineRegion(OfflineRegion&& region, - std::function<void(std::exception_ptr)> callback, - bool pack) { - impl->actor().invoke(&Impl::deleteRegion, std::move(region), callback, pack); +void DefaultFileSource::deleteOfflineRegion(OfflineRegion&& region, std::function<void(std::exception_ptr)> callback) { + impl->actor().invoke(&Impl::deleteRegion, std::move(region), callback); } void DefaultFileSource::invalidateOfflineRegion(OfflineRegion& region, @@ -363,6 +363,10 @@ void DefaultFileSource::packDatabase(std::function<void(std::exception_ptr)> cal impl->actor().invoke(&Impl::packDatabase, std::move(callback)); } +void DefaultFileSource::runPackDatabaseAutomatically(bool autopack) { + impl->actor().invoke(&Impl::runPackDatabaseAutomatically, autopack); +} + void DefaultFileSource::invalidateAmbientCache(std::function<void (std::exception_ptr)> callback) { impl->actor().invoke(&Impl::invalidateAmbientCache, std::move(callback)); } diff --git a/platform/default/src/mbgl/storage/offline_database.cpp b/platform/default/src/mbgl/storage/offline_database.cpp index fef524ce57..974815191b 100644 --- a/platform/default/src/mbgl/storage/offline_database.cpp +++ b/platform/default/src/mbgl/storage/offline_database.cpp @@ -154,7 +154,7 @@ void OfflineDatabase::removeExisting() { void OfflineDatabase::removeOldCacheTable() { assert(db); db->exec("DROP TABLE IF EXISTS http_cache"); - vacuum(); + if (autopack) vacuum(); } void OfflineDatabase::createSchema() { @@ -705,7 +705,7 @@ std::exception_ptr OfflineDatabase::clearAmbientCache() try { resourceQuery.run(); - vacuum(); + if (autopack) vacuum(); return nullptr; } catch (...) { @@ -884,7 +884,7 @@ OfflineDatabase::updateMetadata(const int64_t regionID, const OfflineRegionMetad return unexpected<std::exception_ptr>(std::current_exception()); } -std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region, bool pack) try { +std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region) try { { mapbox::sqlite::Query query{ getStatement("DELETE FROM regions WHERE id = ?") }; query.bind(1, region.getID()); @@ -893,7 +893,7 @@ std::exception_ptr OfflineDatabase::deleteRegion(OfflineRegion&& region, bool pa evict(0); assert(db); - if (pack) vacuum(); + if (autopack) vacuum(); // Ensure that the cached offlineTileCount value is recalculated. offlineMapboxTileCount = nullopt; @@ -1235,7 +1235,7 @@ std::exception_ptr OfflineDatabase::setMaximumAmbientCacheSize(uint64_t size) { if (databaseSize > maximumAmbientCacheSize) { evict(0); - vacuum(); + if (autopack) vacuum(); } return nullptr; |