summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbsudekum <bobby@mapbox.com>2015-09-29 14:45:38 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-09-29 18:20:22 -0700
commit7112d436093d651ac0bdba4f9eaaf63e682b22a3 (patch)
tree552ae318f1ff7dc15cc90fa763c6437cc37c89e1
parentc958ee45abe978274c1c86b8517b2c86bc303c8f (diff)
downloadqtlocation-mapboxgl-7112d436093d651ac0bdba4f9eaaf63e682b22a3.tar.gz
[node] Handle tiles which 404 better
-rw-r--r--include/mbgl/storage/response.hpp2
-rw-r--r--platform/node/src/node_request.cpp4
-rw-r--r--src/mbgl/map/raster_tile_data.cpp6
-rw-r--r--src/mbgl/map/vector_tile_data.cpp6
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;