summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorAlexander Shalamov <alexander.shalamov@mapbox.com>2019-10-04 15:02:01 +0300
committerAlexander Shalamov <alexander.shalamov@mapbox.com>2020-01-13 10:57:23 +0200
commit879c44f661c5eb762c93a721b657859a71aabfc7 (patch)
tree3a542777434e0d685811ce1c66b752dc9ca36e92 /bin
parent86a360534994cb37d3dddc53b71a2858d97419c3 (diff)
downloadqtlocation-mapboxgl-879c44f661c5eb762c93a721b657859a71aabfc7.tar.gz
[core] Modularize FileSource codebase (#15768)
* [core] Introduce FileSourceManager and use it for default platform impl - Add `FileSourceManager` interface that provides access to `FileSource` instances and means of registering / unregistering `FileSource` factories - Split `DefaultFileSource` into smaller parts - Add `DatabaseFileSource` interface and it's default implementation - Remove inter-dependencies between concrete `FileSource` classes * [build] Add files to next build system * [core] Add generic property setters / getters * [core] Remove setOnlineStatus from OnlineFileSource interface * [core] Hide threading implementation details from DatabaseFileSource interface * [core] Make DB file source methods virtual * [core] Add documentation for DatabaseFileSource and rename one method * [core] Use simple callback instead of ActorRef * [core] Remove ActorRef from OnlineFileSource public header * [core] Add callback to FileSource::forward async API * [core] Pass OfflineRegionDefinition by value * [core] Update tests to use modular file sources * [core] Update unit tests * [core] Update unit tests after rebase * [core] Backport low prio fix for cached requests * [core] Backport pack database * [core] Return removed factory from unRegisterFileSourceFactory * [core] Rename shadowed args in onlinefilesource * [core] Remove simple std::function callback aliases * [core] Expose online file source property keys in public header file * [test-runner] Add proxy file source test runner * [cache] Update mbgl-cache utility to use new file source * [metrics] Rebaseline binary size metrics * [offline] Update offline utility * [core] Update changelog
Diffstat (limited to 'bin')
-rw-r--r--bin/cache.cpp11
-rw-r--r--bin/offline.cpp70
2 files changed, 42 insertions, 39 deletions
diff --git a/bin/cache.cpp b/bin/cache.cpp
index eee1d61b32..1df782f752 100644
--- a/bin/cache.cpp
+++ b/bin/cache.cpp
@@ -1,5 +1,6 @@
-#include <mbgl/storage/default_file_source.hpp>
+#include <mbgl/storage/file_source_manager.hpp>
#include <mbgl/storage/resource.hpp>
+#include <mbgl/storage/resource_options.hpp>
#include <mbgl/util/chrono.hpp>
#include <mbgl/util/run_loop.hpp>
@@ -89,9 +90,9 @@ int main(int argc, char* argv[]) {
}
mbgl::util::RunLoop loop;
- mbgl::DefaultFileSource fileSource(args::get(cacheValue), ".");
-
- fileSource.put(resource, response);
-
+ auto dbfs = mbgl::FileSourceManager::get()->getFileSource(
+ mbgl::FileSourceType::Database, mbgl::ResourceOptions().withCachePath(args::get(cacheValue)));
+ dbfs->forward(resource, response, [&loop] { loop.stop(); });
+ loop.run();
return 0;
}
diff --git a/bin/offline.cpp b/bin/offline.cpp
index fcc6adc3ef..c18fc31810 100644
--- a/bin/offline.cpp
+++ b/bin/offline.cpp
@@ -3,7 +3,9 @@
#include <mbgl/util/string.hpp>
#include <mbgl/util/geojson.hpp>
-#include <mbgl/storage/default_file_source.hpp>
+#include <mbgl/storage/database_file_source.hpp>
+#include <mbgl/storage/file_source_manager.hpp>
+#include <mbgl/storage/resource_options.hpp>
#include <args.hxx>
@@ -161,17 +163,16 @@ int main(int argc, char *argv[]) {
util::RunLoop loop;
- DefaultFileSource fileSource(output, ".");
- std::unique_ptr<OfflineRegion> region;
+ std::shared_ptr<DatabaseFileSource> fileSource =
+ std::static_pointer_cast<DatabaseFileSource>(FileSourceManager::get()->getFileSource(
+ FileSourceType::Database,
+ ResourceOptions().withAccessToken(token).withBaseURL(apiBaseURL).withCachePath(output)));
- fileSource.setAccessToken(token);
- fileSource.setAPIBaseURL(apiBaseURL);
+ std::unique_ptr<OfflineRegion> region;
if (inputDb && mergePath) {
- DefaultFileSource inputSource(*inputDb, ".");
- inputSource.setAccessToken(token);
- inputSource.setAPIBaseURL(apiBaseURL);
-
+ DatabaseFileSource inputSource(ResourceOptions().withCachePath(*inputDb));
+
int retCode = 0;
std::cout << "Start Merge" << std::endl;
inputSource.mergeOfflineRegions(*mergePath, [&] (mbgl::expected<std::vector<OfflineRegion>, std::exception_ptr> result) {
@@ -193,13 +194,15 @@ int main(int argc, char *argv[]) {
class Observer : public OfflineRegionObserver {
public:
- Observer(OfflineRegion& region_, DefaultFileSource& fileSource_, util::RunLoop& loop_, mbgl::optional<std::string> mergePath_)
+ Observer(OfflineRegion& region_,
+ std::shared_ptr<DatabaseFileSource> fileSource_,
+ util::RunLoop& loop_,
+ mbgl::optional<std::string> mergePath_)
: region(region_),
- fileSource(fileSource_),
+ fileSource(std::move(fileSource_)),
loop(loop_),
mergePath(std::move(mergePath_)),
- start(util::now()) {
- }
+ start(util::now()) {}
void statusChanged(OfflineRegionStatus status) override {
if (status.downloadState == OfflineRegionDownloadState::Inactive) {
@@ -215,14 +218,11 @@ int main(int argc, char *argv[]) {
bytesPerSecond = util::toString(status.completedResourceSize / elapsedSeconds);
}
- std::cout << status.completedResourceCount << " / " << status.requiredResourceCount
- << " resources"
- << status.completedTileCount << " / " << status.requiredTileCount
- << "tiles"
- << (status.requiredResourceCountIsPrecise ? "; " : " (indeterminate); ")
+ std::cout << status.completedResourceCount << " / " << status.requiredResourceCount << " resources | "
+ << status.completedTileCount << " / " << status.requiredTileCount << " tiles"
+ << (status.requiredResourceCountIsPrecise ? " | " : " (indeterminate); ")
<< status.completedResourceSize << " bytes downloaded"
- << " (" << bytesPerSecond << " bytes/sec)"
- << std::endl;
+ << " (" << bytesPerSecond << " bytes/sec)" << std::endl;
if (status.complete()) {
std::cout << "Finished Download" << std::endl;
@@ -239,7 +239,7 @@ int main(int argc, char *argv[]) {
}
OfflineRegion& region;
- DefaultFileSource& fileSource;
+ std::shared_ptr<DatabaseFileSource> fileSource;
util::RunLoop& loop;
mbgl::optional<std::string> mergePath;
Timestamp start;
@@ -248,24 +248,26 @@ int main(int argc, char *argv[]) {
static auto stop = [&] {
if (region) {
std::cout << "Stopping download... ";
- fileSource.setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Inactive);
+ fileSource->setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Inactive);
}
};
std::signal(SIGINT, [] (int) { stop(); });
- fileSource.createOfflineRegion(definition, metadata, [&] (mbgl::expected<OfflineRegion, std::exception_ptr> region_) {
- if (!region_) {
- std::cerr << "Error creating region: " << util::toString(region_.error()) << std::endl;
- loop.stop();
- exit(1);
- } else {
- assert(region_);
- region = std::make_unique<OfflineRegion>(std::move(*region_));
- fileSource.setOfflineRegionObserver(*region, std::make_unique<Observer>(*region, fileSource, loop, mergePath));
- fileSource.setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Active);
- }
- });
+ fileSource->createOfflineRegion(
+ definition, metadata, [&](mbgl::expected<OfflineRegion, std::exception_ptr> region_) {
+ if (!region_) {
+ std::cerr << "Error creating region: " << util::toString(region_.error()) << std::endl;
+ loop.stop();
+ exit(1);
+ } else {
+ assert(region_);
+ region = std::make_unique<OfflineRegion>(std::move(*region_));
+ fileSource->setOfflineRegionObserver(*region,
+ std::make_unique<Observer>(*region, fileSource, loop, mergePath));
+ fileSource->setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Active);
+ }
+ });
loop.run();
return 0;