From 49725381dffaac33d2071e87fc84882b540ec438 Mon Sep 17 00:00:00 2001 From: Michal Torma Date: Sat, 2 Jul 2022 03:14:58 +0200 Subject: [PATCH 1/4] Test content-type for retry --- .../network_image_with_retry.dart | 20 ++++++++++++++++--- .../tile_provider/tile_provider.dart | 3 ++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart index 7689413a1..574a54c43 100644 --- a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart +++ b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart @@ -10,10 +10,24 @@ class NetworkImageWithRetry extends ImageProvider { /// The scale to place in the [ImageInfo] object of the image. final double scale; - /// The http RetryClient that is used for the requests - final RetryClient retryClient = RetryClient(Client()); + /// + final String? expectedFormat; - NetworkImageWithRetry(this.url, {this.scale = 1.0}); + /// The http RetryClient that is used for the requests + late RetryClient retryClient; + + NetworkImageWithRetry(this.url, {this.scale = 1.0, this.expectedFormat}) { + if (expectedFormat == null) { + retryClient = RetryClient( + Client(), + ); + } else { + retryClient = RetryClient( + Client(), + when: (p0) => p0.headers['content-type'] == expectedFormat, + ); + } + } @override ImageStreamCompleter load(NetworkImageWithRetry key, DecoderCallback decode) { diff --git a/lib/src/layer/tile_layer/tile_provider/tile_provider.dart b/lib/src/layer/tile_layer/tile_provider/tile_provider.dart index 4ffddef66..eb004e3a1 100644 --- a/lib/src/layer/tile_layer/tile_provider/tile_provider.dart +++ b/lib/src/layer/tile_layer/tile_provider/tile_provider.dart @@ -58,7 +58,8 @@ abstract class TileProvider { class NetworkTileProvider extends TileProvider { @override ImageProvider getImage(Coords coords, TileLayerOptions options) { - return NetworkImageWithRetry(getTileUrl(coords, options)); + return NetworkImageWithRetry(getTileUrl(coords, options), + expectedFormat: options.wmsOptions?.format); } } From 84951f76ef46a597089f9e57b81af9cedde45a16 Mon Sep 17 00:00:00 2001 From: Michal Torma Date: Wed, 6 Jul 2022 18:17:08 +0200 Subject: [PATCH 2/4] Enable custom retry client --- .../tile_layer/tile_provider/network_image_with_retry.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart index 7689413a1..b93327e62 100644 --- a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart +++ b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart @@ -11,9 +11,12 @@ class NetworkImageWithRetry extends ImageProvider { final double scale; /// The http RetryClient that is used for the requests - final RetryClient retryClient = RetryClient(Client()); + late RetryClient retryClient; - NetworkImageWithRetry(this.url, {this.scale = 1.0}); + NetworkImageWithRetry(this.url, + {this.scale = 1.0, RetryClient? retryClient}) { + retryClient = retryClient ?? RetryClient(Client()); + } @override ImageStreamCompleter load(NetworkImageWithRetry key, DecoderCallback decode) { From b32f7fe637256c5589f49dd52fc87be741bfaa1d Mon Sep 17 00:00:00 2001 From: Michal Torma Date: Wed, 6 Jul 2022 18:25:03 +0200 Subject: [PATCH 3/4] Add retry client to tile provider --- lib/src/layer/tile_layer/tile_provider/tile_provider.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/src/layer/tile_layer/tile_provider/tile_provider.dart b/lib/src/layer/tile_layer/tile_provider/tile_provider.dart index eb004e3a1..a1698f081 100644 --- a/lib/src/layer/tile_layer/tile_provider/tile_provider.dart +++ b/lib/src/layer/tile_layer/tile_provider/tile_provider.dart @@ -1,6 +1,7 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_map/src/layer/tile_layer/tile_provider/network_image_with_retry.dart'; +import 'package:http/retry.dart'; abstract class TileProvider { const TileProvider(); @@ -56,10 +57,13 @@ abstract class TileProvider { } class NetworkTileProvider extends TileProvider { + RetryClient? retryClient; + + NetworkTileProvider({this.retryClient}); @override ImageProvider getImage(Coords coords, TileLayerOptions options) { return NetworkImageWithRetry(getTileUrl(coords, options), - expectedFormat: options.wmsOptions?.format); + retryClient: retryClient); } } From 292c66af8225f8d8ab5842f7b34cbd17341131d6 Mon Sep 17 00:00:00 2001 From: Michal Torma Date: Wed, 6 Jul 2022 20:44:51 +0200 Subject: [PATCH 4/4] Fix typo --- .../tile_layer/tile_provider/network_image_with_retry.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart index e073186dd..64e6e339b 100644 --- a/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart +++ b/lib/src/layer/tile_layer/tile_provider/network_image_with_retry.dart @@ -15,8 +15,7 @@ class NetworkImageWithRetry extends ImageProvider { NetworkImageWithRetry(this.url, {this.scale = 1.0, RetryClient? retryClient}) { - retryClient = retryClient ?? RetryClient(Client()); - + this.retryClient = retryClient ?? RetryClient(Client()); } @override