diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-08 14:20:34 -0800 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-02-10 15:40:20 -0800 |
commit | c91b44b02f658548bdc70a625eb54d0ea86f6737 (patch) | |
tree | 4bcc7b0ef8f9ffd0ee87270da3fc07f912daf9a8 /bin | |
parent | c3c4c7b9a695ad1dbebe57242ba071103fe9a567 (diff) | |
download | qtlocation-mapboxgl-c91b44b02f658548bdc70a625eb54d0ea86f6737.tar.gz |
Add binary for smoke-testing offline downloads
Diffstat (limited to 'bin')
-rw-r--r-- | bin/offline.cpp | 76 | ||||
-rw-r--r-- | bin/offline.gypi | 44 |
2 files changed, 120 insertions, 0 deletions
diff --git a/bin/offline.cpp b/bin/offline.cpp new file mode 100644 index 0000000000..79a091a534 --- /dev/null +++ b/bin/offline.cpp @@ -0,0 +1,76 @@ +#include <mbgl/util/run_loop.hpp> +#include <mbgl/util/string.hpp> +#include <mbgl/util/io.hpp> + +#include <mbgl/storage/default_file_source.hpp> + +#include <cstdlib> +#include <iostream> + +using namespace std::literals::chrono_literals; + +int main(int, char * []) { + using namespace mbgl; + + util::deleteFile("offline.db"); + + util::RunLoop loop; + DefaultFileSource fileSource("offline.db", "."); + + fileSource.setAccessToken(getenv("MAPBOX_ACCESS_TOKEN")); + + LatLngBounds bayArea = LatLngBounds::hull(LatLng(37.2, -122.8), LatLng(38.1, -121.7)); + OfflineTilePyramidRegionDefinition definition("mapbox://styles/mapbox/streets-v8", bayArea, 0, 15, 1.0); + OfflineRegionMetadata metadata; + + class Observer : public OfflineRegionObserver { + public: + Observer(util::RunLoop& loop_) + : loop(loop_), + start(SystemClock::now()) { + } + + void statusChanged(OfflineRegionStatus status) override { + std::string bytesPerSecond = "-"; + + auto elapsedSeconds = (SystemClock::now() - start) / 1s; + if (elapsedSeconds != 0) { + bytesPerSecond = util::toString(status.completedResourceSize / elapsedSeconds); + } + + std::cout << status.completedResourceCount << " / " << status.requiredResourceCount + << " resources" + << (status.requiredResourceCountIsIndeterminate ? " (indeterminate); " : "; ") + << status.completedResourceSize << " bytes downloaded" + << " (" << bytesPerSecond << " bytes/sec)" + << std::endl; + + if (status.complete()) { + std::cout << "Finished" << std::endl; + loop.stop(); + } + } + + void responseError(Response::Error error) override { + std::cerr << error.reason << " downloading resource: " << error.message << std::endl; + } + + util::RunLoop& loop; + SystemTimePoint start; + }; + + fileSource.createOfflineRegion(definition, metadata, [&] (std::exception_ptr error, optional<OfflineRegion> region) { + if (error) { + std::cerr << "Error creating region: " << util::toString(error) << std::endl; + loop.stop(); + exit(1); + } else { + assert(region); + fileSource.setOfflineRegionObserver(*region, std::make_unique<Observer>(loop)); + fileSource.setOfflineRegionDownloadState(*region, OfflineRegionDownloadState::Active); + } + }); + + loop.run(); + return 0; +} diff --git a/bin/offline.gypi b/bin/offline.gypi new file mode 100644 index 0000000000..b5980ae76d --- /dev/null +++ b/bin/offline.gypi @@ -0,0 +1,44 @@ +{ + 'includes': [ + '../gyp/common.gypi', + ], + 'targets': [ + { 'target_name': 'mbgl-offline', + 'product_name': 'mbgl-offline', + 'type': 'executable', + + 'dependencies': [ + 'mbgl.gyp:core', + 'mbgl.gyp:platform-<(platform_lib)', + 'mbgl.gyp:headless-<(headless_lib)', + 'mbgl.gyp:http-<(http_lib)', + 'mbgl.gyp:asset-<(asset_lib)', + 'mbgl.gyp:copy_certificate_bundle', + ], + + 'include_dirs': [ + '../src', + ], + + 'sources': [ + './offline.cpp', + ], + + 'variables' : { + 'cflags_cc': [ + '<@(boost_cflags)', + ], + }, + + 'conditions': [ + ['OS == "mac"', { + 'xcode_settings': { + 'OTHER_CPLUSPLUSFLAGS': [ '<@(cflags_cc)' ], + } + }, { + 'cflags_cc': [ '<@(cflags_cc)' ], + }] + ], + }, + ], +} |