From 87edff4047ddaf5a49b31c060bfae55d74d6c0cb Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 14 Jun 2016 12:36:46 -0700 Subject: [core] Use variant in TileSource A tile source can either specify a URL to TileJSON, or inline TileJSON. --- platform/default/mbgl/storage/offline_download.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'platform') diff --git a/platform/default/mbgl/storage/offline_download.cpp b/platform/default/mbgl/storage/offline_download.cpp index 8a156dd649..3d0ebaa68f 100644 --- a/platform/default/mbgl/storage/offline_download.cpp +++ b/platform/default/mbgl/storage/offline_download.cpp @@ -107,14 +107,17 @@ OfflineRegionStatus OfflineDownload::getStatus() const { case SourceType::Vector: case SourceType::Raster: { style::TileSource* tileSource = static_cast(source.get()); - if (tileSource->getTileset()) { - result.requiredResourceCount += tileResources(source->type, tileSource->getTileSize(), *tileSource->getTileset()).size(); + const variant& urlOrTileset = tileSource->getURLOrTileset(); + + if (urlOrTileset.is()) { + result.requiredResourceCount += tileResources(source->type, tileSource->getTileSize(), urlOrTileset.get()).size(); } else { result.requiredResourceCount += 1; - optional sourceResponse = offlineDatabase.get(Resource::source(tileSource->getURL())); + const std::string& url = urlOrTileset.get(); + optional sourceResponse = offlineDatabase.get(Resource::source(url)); if (sourceResponse) { result.requiredResourceCount += tileResources(source->type, tileSource->getTileSize(), - *style::parseTileJSON(*sourceResponse->data, tileSource->getURL(), source->type, tileSource->getTileSize())).size(); + style::TileSource::parseTileJSON(*sourceResponse->data, url, source->type, tileSource->getTileSize())).size(); } else { result.requiredResourceCountIsPrecise = false; } @@ -161,16 +164,18 @@ void OfflineDownload::activateDownload() { case SourceType::Vector: case SourceType::Raster: { const style::TileSource* tileSource = static_cast(source.get()); + const variant& urlOrTileset = tileSource->getURLOrTileset(); const uint16_t tileSize = tileSource->getTileSize(); - if (tileSource->getTileset()) { - ensureTiles(type, tileSize, *tileSource->getTileset()); + + if (urlOrTileset.is()) { + ensureTiles(type, tileSize, urlOrTileset.get()); } else { - std::string url = tileSource->getURL(); + const std::string& url = urlOrTileset.get(); status.requiredResourceCountIsPrecise = false; requiredSourceURLs.insert(url); ensureResource(Resource::source(url), [=] (Response sourceResponse) { - ensureTiles(type, tileSize, *style::parseTileJSON(*sourceResponse.data, url, type, tileSize)); + ensureTiles(type, tileSize, style::TileSource::parseTileJSON(*sourceResponse.data, url, type, tileSize)); requiredSourceURLs.erase(url); if (requiredSourceURLs.empty()) { -- cgit v1.2.1