diff options
author | Molly Lloyd <mollymerp@users.noreply.github.com> | 2016-09-20 11:43:00 -0400 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2016-09-20 17:43:00 +0200 |
commit | 598f7c6ad5147417c7241514f1fdece348a9b997 (patch) | |
tree | 0e238b65c58cd0cd3cb5b9f10a12c35715ae9969 | |
parent | 97da3872737ea08bdb2f50a22baf08aab123fafb (diff) | |
download | qtlocation-mapboxgl-598f7c6ad5147417c7241514f1fdece348a9b997.tar.gz |
[core] allow offline region metadata to be updated (#6338)
-rw-r--r-- | include/mbgl/storage/default_file_source.hpp | 7 | ||||
-rw-r--r-- | platform/default/default_file_source.cpp | 16 | ||||
-rw-r--r-- | platform/default/mbgl/storage/offline_database.cpp | 13 | ||||
-rw-r--r-- | platform/default/mbgl/storage/offline_database.hpp | 2 | ||||
-rw-r--r-- | test/storage/offline_database.cpp | 13 |
5 files changed, 51 insertions, 0 deletions
diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp index ab9c2bc6a0..4340496af9 100644 --- a/include/mbgl/storage/default_file_source.hpp +++ b/include/mbgl/storage/default_file_source.hpp @@ -65,6 +65,13 @@ public: optional<OfflineRegion>)>); /* + * Update an offline region metadata in the database. + */ + void updateOfflineMetadata(const int64_t regionID, + const OfflineRegionMetadata& metadata, + std::function<void (std::exception_ptr, + optional<OfflineRegionMetadata>)>); + /* * Register an observer to be notified when the state of the region changes. */ void setOfflineRegionObserver(OfflineRegion&, std::unique_ptr<OfflineRegionObserver>); diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index 83674cea03..099890a035 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -62,6 +62,16 @@ public: callback(std::current_exception(), {}); } } + + void updateMetadata(const int64_t regionID, + const OfflineRegionMetadata& metadata, + std::function<void (std::exception_ptr, optional<OfflineRegionMetadata>)> callback) { + try { + callback({}, offlineDatabase.updateMetadata(regionID, metadata)); + } catch (...) { + callback(std::current_exception(), {}); + } + } void getRegionStatus(int64_t regionID, std::function<void (std::exception_ptr, optional<OfflineRegionStatus>)> callback) { try { @@ -208,6 +218,12 @@ void DefaultFileSource::createOfflineRegion(const OfflineRegionDefinition& defin thread->invoke(&Impl::createRegion, definition, metadata, callback); } +void DefaultFileSource::updateOfflineMetadata(const int64_t regionID, + const OfflineRegionMetadata& metadata, + std::function<void (std::exception_ptr, optional<OfflineRegionMetadata>)> callback) { + thread->invoke(&Impl::updateMetadata, regionID, metadata, callback); +} + void DefaultFileSource::deleteOfflineRegion(OfflineRegion&& region, std::function<void (std::exception_ptr)> callback) { thread->invoke(&Impl::deleteRegion, std::move(region), callback); } diff --git a/platform/default/mbgl/storage/offline_database.cpp b/platform/default/mbgl/storage/offline_database.cpp index 40296307cc..b2ed16db56 100644 --- a/platform/default/mbgl/storage/offline_database.cpp +++ b/platform/default/mbgl/storage/offline_database.cpp @@ -523,6 +523,19 @@ OfflineRegion OfflineDatabase::createRegion(const OfflineRegionDefinition& defin return OfflineRegion(db->lastInsertRowid(), definition, metadata); } +OfflineRegionMetadata OfflineDatabase::updateMetadata(const int64_t regionID, const OfflineRegionMetadata& metadata) { + // clang-format off + Statement stmt = getStatement( + "UPDATE regions SET description = ?1" + "WHERE id = ?2"); + // clang-format on + stmt->bindBlob(1, metadata); + stmt->bind(2, regionID); + stmt->run(); + + return metadata; +} + void OfflineDatabase::deleteRegion(OfflineRegion&& region) { // clang-format off Statement stmt = getStatement( diff --git a/platform/default/mbgl/storage/offline_database.hpp b/platform/default/mbgl/storage/offline_database.hpp index 6873bc74dc..011817fbee 100644 --- a/platform/default/mbgl/storage/offline_database.hpp +++ b/platform/default/mbgl/storage/offline_database.hpp @@ -40,6 +40,8 @@ public: OfflineRegion createRegion(const OfflineRegionDefinition&, const OfflineRegionMetadata&); + OfflineRegionMetadata updateMetadata(const int64_t regionID, const OfflineRegionMetadata&); + void deleteRegion(OfflineRegion&&); // Return value is (response, stored size) diff --git a/test/storage/offline_database.cpp b/test/storage/offline_database.cpp index 656fc2878a..bcc9784b35 100644 --- a/test/storage/offline_database.cpp +++ b/test/storage/offline_database.cpp @@ -274,6 +274,19 @@ TEST(OfflineDatabase, CreateRegion) { EXPECT_EQ(metadata, region.getMetadata()); } +TEST(OfflineDatabase, UpdateMetadata) { + using namespace mbgl; + + OfflineDatabase db(":memory:"); + OfflineRegionDefinition definition { "http://example.com/style", LatLngBounds::hull({1, 2}, {3, 4}), 5, 6, 2.0 }; + OfflineRegionMetadata metadata {{ 1, 2, 3 }}; + OfflineRegion region = db.createRegion(definition, metadata); + + OfflineRegionMetadata newmetadata {{ 4, 5, 6 }}; + db.updateMetadata(region.getID(), newmetadata); + EXPECT_EQ(db.listRegions().at(0).getMetadata(), newmetadata); +} + TEST(OfflineDatabase, ListRegions) { using namespace mbgl; |