summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/storage/default_file_source.hpp7
-rw-r--r--platform/default/default_file_source.cpp16
-rw-r--r--platform/default/mbgl/storage/offline_database.cpp13
-rw-r--r--platform/default/mbgl/storage/offline_database.hpp2
-rw-r--r--test/storage/offline_database.cpp13
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;