diff --git a/src/io/scheduler.rs b/src/io/scheduler.rs index 0a12e59f..038e2cf8 100644 --- a/src/io/scheduler.rs +++ b/src/io/scheduler.rs @@ -219,11 +219,7 @@ impl IOScheduler { ) -> Result<(), SendError> { let TileRequest { coords, layers } = &tile_request; - let mut missing_layers = layers.clone(); - self.tile_cache - .retain_missing_layer_names(coords, &mut missing_layers); - - if missing_layers.is_empty() { + if !self.tile_cache.is_layers_missing(coords, layers) { return Ok(()); } diff --git a/src/io/tile_cache.rs b/src/io/tile_cache.rs index 8f3c9be0..5fd5de4e 100644 --- a/src/io/tile_cache.rs +++ b/src/io/tile_cache.rs @@ -56,4 +56,22 @@ impl TileCache { layers.retain(|layer| !tessellated_set.contains(layer)); } } + + pub fn is_layers_missing(&self, coords: &WorldTileCoords, layers: &HashSet) -> bool { + if let Some(results) = self.index.get(coords) { + let tessellated_set: HashSet<&str> = results + .iter() + .map(|tessellated_layer| tessellated_layer.layer_name()) + .collect(); + + for layer in layers { + if !tessellated_set.contains(layer.as_str()) { + return true; + } + } + + return false; + } + true + } }