summaryrefslogtreecommitdiff
path: root/platform/default/mbgl/storage/offline_download.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/mbgl/storage/offline_download.cpp')
-rw-r--r--platform/default/mbgl/storage/offline_download.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/platform/default/mbgl/storage/offline_download.cpp b/platform/default/mbgl/storage/offline_download.cpp
index 293166b807..9e2e11c86f 100644
--- a/platform/default/mbgl/storage/offline_download.cpp
+++ b/platform/default/mbgl/storage/offline_download.cpp
@@ -252,19 +252,26 @@ void OfflineDownload::ensureResource(const Resource& resource,
auto workRequestsIt = requests.insert(requests.begin(), nullptr);
*workRequestsIt = util::RunLoop::Get()->invokeCancellable([=]() {
requests.erase(workRequestsIt);
-
- optional<std::pair<Response, uint64_t>> offlineResponse =
- offlineDatabase.getRegionResource(id, resource);
- if (offlineResponse) {
- if (callback) {
- callback(offlineResponse->first);
+
+ auto getResourceSizeInDatabase = [&] () -> optional<int64_t> {
+ if (!callback) {
+ return offlineDatabase.hasRegionResource(id, resource);
}
-
+ optional<std::pair<Response, uint64_t>> response = offlineDatabase.getRegionResource(id, resource);
+ if (!response) {
+ return {};
+ }
+ callback(response->first);
+ return response->second;
+ };
+
+ optional<int64_t> offlineResponse = getResourceSizeInDatabase();
+ if (offlineResponse) {
status.completedResourceCount++;
- status.completedResourceSize += offlineResponse->second;
+ status.completedResourceSize += *offlineResponse;
if (resource.kind == Resource::Kind::Tile) {
status.completedTileCount += 1;
- status.completedTileSize += offlineResponse->second;
+ status.completedTileSize += *offlineResponse;
}
observer->statusChanged(status);