From 46ef2d86d2065aaaa63e8c83c750e46c74932777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Tue, 14 May 2019 14:54:24 +0200 Subject: [PATCH] [core] invoke optional resource path change completion listener --- include/mbgl/storage/default_file_source.hpp | 5 ++++- .../default/src/mbgl/storage/default_file_source.cpp | 9 ++++++--- test/storage/default_file_source.test.cpp | 12 ++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp index 10a836094..2a1e32bae 100644 --- a/include/mbgl/storage/default_file_source.hpp +++ b/include/mbgl/storage/default_file_source.hpp @@ -18,6 +18,9 @@ template class Thread; class ResourceTransform; +// TODO: the callback should include a potential error info when https://github.com/mapbox/mapbox-gl-native/issues/14759 is resolved +using PathChangeCallback = std::function; + class DefaultFileSource : public FileSource { public: /* @@ -47,7 +50,7 @@ public: void setResourceTransform(optional>&&); - void setResourceCachePath(const std::string&); + void setResourceCachePath(const std::string&, optional>&&); std::unique_ptr request(const Resource&, Callback) override; diff --git a/platform/default/src/mbgl/storage/default_file_source.cpp b/platform/default/src/mbgl/storage/default_file_source.cpp index 2768f9d11..eabb7b45c 100644 --- a/platform/default/src/mbgl/storage/default_file_source.cpp +++ b/platform/default/src/mbgl/storage/default_file_source.cpp @@ -46,8 +46,11 @@ public: onlineFileSource.setResourceTransform(std::move(transform)); } - void setResourceCachePath(const std::string& path) { + void setResourceCachePath(const std::string& path, optional>&& callback) { offlineDatabase->changePath(path); + if (callback) { + callback->invoke(&PathChangeCallback::operator()); + } } void listRegions(std::function)> callback) { @@ -252,8 +255,8 @@ void DefaultFileSource::setResourceTransform(optionalactor().invoke(&Impl::setResourceTransform, std::move(transform)); } -void DefaultFileSource::setResourceCachePath(const std::string& path) { - impl->actor().invoke(&Impl::setResourceCachePath, path); +void DefaultFileSource::setResourceCachePath(const std::string& path, optional>&& callback) { + impl->actor().invoke(&Impl::setResourceCachePath, path, std::move(callback)); } std::unique_ptr DefaultFileSource::request(const Resource& resource, Callback callback) { diff --git a/test/storage/default_file_source.test.cpp b/test/storage/default_file_source.test.cpp index e1c5df689..64b23e315 100644 --- a/test/storage/default_file_source.test.cpp +++ b/test/storage/default_file_source.test.cpp @@ -572,6 +572,18 @@ TEST(DefaultFileSource, TEST_REQUIRES_SERVER(SetResourceTransform)) { loop.run(); } +TEST(DefaultFileSource, SetResourceCachePath) { + util::RunLoop loop; + DefaultFileSource fs(":memory:", "."); + + Actor callback(loop, [&]() -> void { + loop.stop(); + }); + + fs.setResourceCachePath("./new_offline.db", callback.self()); + loop.run(); +} + // Test that a stale cache file that has must-revalidate set will trigger a response. TEST(DefaultFileSource, TEST_REQUIRES_SERVER(RespondToStaleMustRevalidate)) { util::RunLoop loop;