diff options
author | bsudekum <bobby@mapbox.com> | 2015-09-29 14:45:38 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-09-29 18:20:22 -0700 |
commit | 7112d436093d651ac0bdba4f9eaaf63e682b22a3 (patch) | |
tree | 552ae318f1ff7dc15cc90fa763c6437cc37c89e1 | |
parent | c958ee45abe978274c1c86b8517b2c86bc303c8f (diff) | |
download | qtlocation-mapboxgl-7112d436093d651ac0bdba4f9eaaf63e682b22a3.tar.gz |
[node] Handle tiles which 404 better
-rw-r--r-- | include/mbgl/storage/response.hpp | 2 | ||||
-rw-r--r-- | platform/node/src/node_request.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/raster_tile_data.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile_data.cpp | 6 |
4 files changed, 16 insertions, 2 deletions
diff --git a/include/mbgl/storage/response.hpp b/include/mbgl/storage/response.hpp index cf22d9002b..e665f177fc 100644 --- a/include/mbgl/storage/response.hpp +++ b/include/mbgl/storage/response.hpp @@ -7,7 +7,7 @@ namespace mbgl { class Response { public: - enum Status : bool { Error, Successful }; + enum Status { Error, Successful, NotFound }; Status status = Error; std::string message; diff --git a/platform/node/src/node_request.cpp b/platform/node/src/node_request.cpp index 76cafacbd5..fb4d47045b 100644 --- a/platform/node/src/node_request.cpp +++ b/platform/node/src/node_request.cpp @@ -64,7 +64,9 @@ NAN_METHOD(NodeRequest::Respond) { auto resource = std::move(nodeRequest->resource); if (info.Length() < 1) { - return Nan::ThrowTypeError("First argument must be an error object"); + auto response = std::make_shared<mbgl::Response>(); + response->status = mbgl::Response::NotFound; + source->notify(*resource, response); } else if (info[0]->BooleanValue()) { auto response = std::make_shared<mbgl::Response>(); diff --git a/src/mbgl/map/raster_tile_data.cpp b/src/mbgl/map/raster_tile_data.cpp index ce26586ff2..27094510a6 100644 --- a/src/mbgl/map/raster_tile_data.cpp +++ b/src/mbgl/map/raster_tile_data.cpp @@ -33,6 +33,12 @@ void RasterTileData::request(float pixelRatio, req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; + if (res.status == Response::NotFound) { + state = State::parsed; + callback(); + return; + } + if (res.status != Response::Successful) { std::stringstream message; message << "Failed to load [" << url << "]: " << res.message; diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp index 678a3867ca..433208bdf3 100644 --- a/src/mbgl/map/vector_tile_data.cpp +++ b/src/mbgl/map/vector_tile_data.cpp @@ -44,6 +44,12 @@ void VectorTileData::request(float pixelRatio, const std::function<void()>& call req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; + if (res.status == Response::NotFound) { + state = State::parsed; + callback(); + return; + } + if (res.status != Response::Successful) { std::stringstream message; message << "Failed to load [" << url << "]: " << res.message; |