diff --git a/bin/offline.cpp b/bin/offline.cpp index fcc6adc3efc..c18fc31810f 100644 --- a/bin/offline.cpp +++ b/bin/offline.cpp @@ -3,7 +3,9 @@ #include #include -#include +#include +#include +#include #include @@ -161,17 +163,16 @@ int main(int argc, char *argv[]) { util::RunLoop loop; - DefaultFileSource fileSource(output, "."); - std::unique_ptr region; + std::shared_ptr fileSource = + std::static_pointer_cast(FileSourceManager::get()->getFileSource( + FileSourceType::Database, + ResourceOptions().withAccessToken(token).withBaseURL(apiBaseURL).withCachePath(output))); - fileSource.setAccessToken(token); - fileSource.setAPIBaseURL(apiBaseURL); + std::unique_ptr 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::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 mergePath_) + Observer(OfflineRegion& region_, + std::shared_ptr fileSource_, + util::RunLoop& loop_, + mbgl::optional 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 fileSource; util::RunLoop& loop; mbgl::optional 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 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(std::move(*region_)); - fileSource.setOfflineRegionObserver(*region, std::make_unique(*region, fileSource, loop, mergePath)); - fileSource.setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Active); - } - }); + fileSource->createOfflineRegion( + definition, metadata, [&](mbgl::expected 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(std::move(*region_)); + fileSource->setOfflineRegionObserver(*region, + std::make_unique(*region, fileSource, loop, mergePath)); + fileSource->setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Active); + } + }); loop.run(); return 0;