diff options
Diffstat (limited to 'src/mbgl/map/raster_tile_data.cpp')
-rw-r--r-- | src/mbgl/map/raster_tile_data.cpp | 74 |
1 files changed, 34 insertions, 40 deletions
diff --git a/src/mbgl/map/raster_tile_data.cpp b/src/mbgl/map/raster_tile_data.cpp index f9f5480197..8df4e05b62 100644 --- a/src/mbgl/map/raster_tile_data.cpp +++ b/src/mbgl/map/raster_tile_data.cpp @@ -22,52 +22,46 @@ RasterTileData::RasterTileData(const TileID& id_, const Resource resource = Resource::tile(urlTemplate, pixelRatio, id.x, id.y, id.sourceZ); req = util::ThreadContext::getFileSource()->request(resource, [callback, this](Response res) { if (res.error) { - std::exception_ptr error; - if (res.error->reason == Response::Error::Reason::NotFound) { - // This is a 404 response. We're treating these as empty tiles. - workRequest.reset(); - state = State::parsed; - bucket.reset(); - } else { - // This is a different error, e.g. a connection or server error. - error = std::make_exception_ptr(std::runtime_error(res.error->message)); - } - callback(error); - return; - } - - modified = res.modified; - expires = res.expires; - - if (res.notModified) { - // We got the same data again. Abort early. - return; - } + callback(std::make_exception_ptr(std::runtime_error(res.error->message))); + } else if (res.notModified) { + modified = res.modified; + expires = res.expires; + } else if (res.noContent) { + state = State::parsed; + modified = res.modified; + expires = res.expires; + workRequest.reset(); + bucket.reset(); + callback(nullptr); + } else { + modified = res.modified; + expires = res.expires; - if (state == State::loading) { // Only overwrite the state when we didn't have a previous tile. - state = State::loaded; - } + if (state == State::loading) { + state = State::loaded; + } - workRequest.reset(); - workRequest = worker.parseRasterTile(std::make_unique<RasterBucket>(texturePool), res.data, [this, callback] (RasterTileParseResult result) { workRequest.reset(); - if (state != State::loaded) { - return; - } + workRequest = worker.parseRasterTile(std::make_unique<RasterBucket>(texturePool), res.data, [this, callback] (RasterTileParseResult result) { + workRequest.reset(); + if (state != State::loaded) { + return; + } - std::exception_ptr error; - if (result.is<std::unique_ptr<Bucket>>()) { - state = State::parsed; - bucket = std::move(result.get<std::unique_ptr<Bucket>>()); - } else { - error = result.get<std::exception_ptr>(); - state = State::obsolete; - bucket.reset(); - } + std::exception_ptr error; + if (result.is<std::unique_ptr<Bucket>>()) { + state = State::parsed; + bucket = std::move(result.get<std::unique_ptr<Bucket>>()); + } else { + error = result.get<std::exception_ptr>(); + state = State::obsolete; + bucket.reset(); + } - callback(error); - }); + callback(error); + }); + } }); } |