summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-02-08 14:20:34 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-02-10 15:40:20 -0800
commitc91b44b02f658548bdc70a625eb54d0ea86f6737 (patch)
tree4bcc7b0ef8f9ffd0ee87270da3fc07f912daf9a8 /bin
parentc3c4c7b9a695ad1dbebe57242ba071103fe9a567 (diff)
downloadqtlocation-mapboxgl-c91b44b02f658548bdc70a625eb54d0ea86f6737.tar.gz
Add binary for smoke-testing offline downloads
Diffstat (limited to 'bin')
-rw-r--r--bin/offline.cpp76
-rw-r--r--bin/offline.gypi44
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)' ],
+ }]
+ ],
+ },
+ ],
+}