summaryrefslogtreecommitdiff
path: root/platform/default/mbgl/storage/offline_database.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-03-04 14:26:58 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-03-04 15:15:09 -0800
commiteb9b4638417ddfb519cd278f25ad022500a9573a (patch)
tree996c51e79678510e2826bf93f3ff20a635cff9f2 /platform/default/mbgl/storage/offline_database.cpp
parent803adf42c9f8811598a2289c6b2773e968bebe30 (diff)
downloadqtlocation-mapboxgl-eb9b4638417ddfb519cd278f25ad022500a9573a.tar.gz
[core] Fix offline status reporting with pre-existing tiles (#4147)
Diffstat (limited to 'platform/default/mbgl/storage/offline_database.cpp')
-rw-r--r--platform/default/mbgl/storage/offline_database.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/platform/default/mbgl/storage/offline_database.cpp b/platform/default/mbgl/storage/offline_database.cpp
index df3e3f4dc3..a42591d60e 100644
--- a/platform/default/mbgl/storage/offline_database.cpp
+++ b/platform/default/mbgl/storage/offline_database.cpp
@@ -103,6 +103,11 @@ OfflineDatabase::Statement OfflineDatabase::getStatement(const char * sql) {
}
optional<Response> OfflineDatabase::get(const Resource& resource) {
+ auto result = getInternal(resource);
+ return result ? result->first : optional<Response>();
+}
+
+optional<std::pair<Response, uint64_t>> OfflineDatabase::getInternal(const Resource& resource) {
if (resource.kind == Resource::Kind::Tile) {
assert(resource.tileData);
return getTile(*resource.tileData);
@@ -151,7 +156,7 @@ std::pair<bool, uint64_t> OfflineDatabase::putInternal(const Resource& resource,
return { inserted, size };
}
-optional<Response> OfflineDatabase::getResource(const Resource& resource) {
+optional<std::pair<Response, uint64_t>> OfflineDatabase::getResource(const Resource& resource) {
Statement accessedStmt = getStatement(
"UPDATE resources SET accessed = ?1 WHERE url = ?2");
@@ -172,6 +177,7 @@ optional<Response> OfflineDatabase::getResource(const Resource& resource) {
}
Response response;
+ uint64_t size = 0;
response.etag = stmt->get<optional<std::string>>(0);
response.expires = stmt->get<optional<SystemTimePoint>>(1);
@@ -182,11 +188,13 @@ optional<Response> OfflineDatabase::getResource(const Resource& resource) {
response.noContent = true;
} else if (stmt->get<int>(4)) {
response.data = std::make_shared<std::string>(util::decompress(*data));
+ size = data->length();
} else {
response.data = std::make_shared<std::string>(*data);
+ size = data->length();
}
- return response;
+ return std::make_pair(response, size);
}
bool OfflineDatabase::putResource(const Resource& resource,
@@ -263,7 +271,7 @@ bool OfflineDatabase::putResource(const Resource& resource,
return true;
}
-optional<Response> OfflineDatabase::getTile(const Resource::TileData& tile) {
+optional<std::pair<Response, uint64_t>> OfflineDatabase::getTile(const Resource::TileData& tile) {
Statement accessedStmt = getStatement(
"UPDATE tiles "
"SET accessed = ?1 "
@@ -302,6 +310,7 @@ optional<Response> OfflineDatabase::getTile(const Resource::TileData& tile) {
}
Response response;
+ uint64_t size = 0;
response.etag = stmt->get<optional<std::string>>(0);
response.expires = stmt->get<optional<SystemTimePoint>>(1);
@@ -312,11 +321,13 @@ optional<Response> OfflineDatabase::getTile(const Resource::TileData& tile) {
response.noContent = true;
} else if (stmt->get<int>(4)) {
response.data = std::make_shared<std::string>(util::decompress(*data));
+ size = data->length();
} else {
response.data = std::make_shared<std::string>(*data);
+ size = data->length();
}
- return response;
+ return std::make_pair(response, size);
}
bool OfflineDatabase::putTile(const Resource::TileData& tile,
@@ -452,8 +463,8 @@ void OfflineDatabase::deleteRegion(OfflineRegion&& region) {
offlineMapboxTileCount = {};
}
-optional<Response> OfflineDatabase::getRegionResource(int64_t regionID, const Resource& resource) {
- auto response = get(resource);
+optional<std::pair<Response, uint64_t>> OfflineDatabase::getRegionResource(int64_t regionID, const Resource& resource) {
+ auto response = getInternal(resource);
if (response) {
markUsed(regionID, resource);