diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-03-07 22:50:57 -0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-03-08 10:31:01 -0300 |
commit | 672727f773070f11e9eb2755d3e9c83b75b0d2d8 (patch) | |
tree | d47c7a00f339994dd861c6b346e22e3407967072 | |
parent | b8b283588f59db539715217aba164a380e053ea5 (diff) | |
download | qtlocation-mapboxgl-672727f773070f11e9eb2755d3e9c83b75b0d2d8.tar.gz |
[core] Make OnlineFileSource respect the NetworkStatus
The user can now force the Offline mode and set it back
to Online, triggering the requests waiting for network connection.
-rw-r--r-- | platform/default/default_file_source.cpp | 11 | ||||
-rw-r--r-- | platform/default/online_file_source.cpp | 9 |
2 files changed, 13 insertions, 7 deletions
diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index 80666ca122..e3b785d086 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -1,6 +1,5 @@ #include <mbgl/storage/default_file_source.hpp> #include <mbgl/storage/asset_file_source.hpp> -#include <mbgl/storage/network_status.hpp> #include <mbgl/storage/online_file_source.hpp> #include <mbgl/storage/offline_database.hpp> #include <mbgl/storage/offline_download.hpp> @@ -40,12 +39,10 @@ public: callback(*offlineResponse); } - if (NetworkStatus::Get() == NetworkStatus::Status::Online) { - onlineRequest = impl->onlineFileSource.request(revalidation, [=] (Response onlineResponse) { - impl->offlineDatabase.put(revalidation, onlineResponse); - callback(onlineResponse); - }); - } + onlineRequest = impl->onlineFileSource.request(revalidation, [=] (Response onlineResponse) { + impl->offlineDatabase.put(revalidation, onlineResponse); + callback(onlineResponse); + }); } std::unique_ptr<FileRequest> onlineRequest; diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp index a39aee35a1..77dddac112 100644 --- a/platform/default/online_file_source.cpp +++ b/platform/default/online_file_source.cpp @@ -289,6 +289,15 @@ void OnlineFileRequestImpl::schedule(OnlineFileSource::Impl& impl, optional<Syst return; } + // Emulate a Connection error when the Offline mode is forced with + // a really long timeout. The request will get re-triggered when + // the NetworkStatus is set back to Online. + if (NetworkStatus::Get() == NetworkStatus::Status::Offline) { + failedRequestReason = Response::Error::Reason::Connection; + failedRequests = 1; + timeout = Duration::max(); + } + timer.start(timeout, Duration::zero(), [&] { impl.activateOrQueueRequest(this); }); |