diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-02-16 18:28:07 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-02-20 14:36:27 +0100 |
commit | e2d8a83664a2705edc762ac00dcaf7eead2ae6fd (patch) | |
tree | 93b0bfdb9d6f93ddcee9c8699976ea7cee110c40 /platform/default/online_file_source.cpp | |
parent | 8669f933fdaf957253d7ec6b7453b95e93adc1b1 (diff) | |
download | qtlocation-mapboxgl-e2d8a83664a2705edc762ac00dcaf7eead2ae6fd.tar.gz |
[core] add ability to transform URLs before they're requested from the Internet
Diffstat (limited to 'platform/default/online_file_source.cpp')
-rw-r--r-- | platform/default/online_file_source.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp index 33168b7973..a72b6f4efc 100644 --- a/platform/default/online_file_source.cpp +++ b/platform/default/online_file_source.cpp @@ -31,6 +31,7 @@ public: ~OnlineFileRequest() override; void networkIsReachableAgain(); + void schedule(); void schedule(optional<Timestamp> expires); void completed(Response); @@ -64,6 +65,19 @@ public: void add(OnlineFileRequest* request) { allRequests.insert(request); + if (resourceTransform) { + // When there's a Resource transform callback set, replace the resource with the + // transformed one before proceeding to schedule the request. + request->request = + resourceTransform(request->resource.kind, std::move(request->resource.url), + [request](std::string&& url) { + request->request.release(); + request->resource.url = std::move(url); + request->schedule(); + }); + } else { + request->schedule(); + } } void remove(OnlineFileRequest* request) { @@ -131,6 +145,10 @@ public: return activeRequests.find(request) != activeRequests.end(); } + void setResourceTransform(ResourceTransform&& transform) { + resourceTransform = std::move(transform); + } + private: void networkIsReachableAgain() { for (auto& request : allRequests) { @@ -138,6 +156,8 @@ private: } } + ResourceTransform resourceTransform; + /** * The lifetime of a request is: * @@ -196,12 +216,18 @@ std::unique_ptr<AsyncRequest> OnlineFileSource::request(const Resource& resource return std::make_unique<OnlineFileRequest>(std::move(res), std::move(callback), *impl); } +void OnlineFileSource::setResourceTransform(ResourceTransform&& transform) { + impl->setResourceTransform(std::move(transform)); +} + OnlineFileRequest::OnlineFileRequest(Resource resource_, Callback callback_, OnlineFileSource::Impl& impl_) : impl(impl_), resource(std::move(resource_)), callback(std::move(callback_)) { impl.add(this); +} +void OnlineFileRequest::schedule() { // Force an immediate first request if we don't have an expiration time. if (resource.priorExpires) { schedule(resource.priorExpires); |