diff --git a/app/lib/domain/services/generic_website.dart b/app/lib/domain/services/generic_website.dart index f487c2ca..7853303b 100644 --- a/app/lib/domain/services/generic_website.dart +++ b/app/lib/domain/services/generic_website.dart @@ -57,8 +57,6 @@ Iterable sizesToList(String? sizes) sync* { class GenericWebsiteService extends _$GenericWebsiteService { final GeckoIconService _iconsService; - late http.Client _client; - //Global icon cache late CacheRepository _cacheRepository; //Local decoded icon cache @@ -70,7 +68,6 @@ class GenericWebsiteService extends _$GenericWebsiteService { @override void build() { - _client = http.Client(); _cacheRepository = ref.watch(cacheRepositoryProvider.notifier); } @@ -189,22 +186,27 @@ class GenericWebsiteService extends _$GenericWebsiteService { Future> fetchPageInfo(Uri url) async { return Result.fromAsync(() async { - final response = await _client - .get(url) - .timeout(const Duration(seconds: 15)); + final result = await compute((String urlString) async { + final client = http.Client(); + try { + final baseUri = Uri.parse(urlString); + final response = await client + .get(baseUri) + .timeout(const Duration(seconds: 15)); - final result = await compute((args) async { - final document = html_parser.parse(args[0]); - final baseUri = Uri.parse(args[1]); + final document = html_parser.parse(response.body); - final title = document.querySelector('title')?.text; - final resources = _extractIcons(baseUri, document); + final title = document.querySelector('title')?.text; + final resources = _extractIcons(baseUri, document); - return { - 'title': title, - 'resources': resources.map(_serializeResource).toList(), - }; - }, [response.body, url.toString()]); + return { + 'title': title, + 'resources': resources.map(_serializeResource).toList(), + }; + } finally { + client.close(); + } + }, url.toString()); final resources = (result['resources']! as List>) diff --git a/app/lib/domain/services/generic_website.g.dart b/app/lib/domain/services/generic_website.g.dart index fb0a4627..fea956ca 100644 --- a/app/lib/domain/services/generic_website.g.dart +++ b/app/lib/domain/services/generic_website.g.dart @@ -7,7 +7,7 @@ part of 'generic_website.dart'; // ************************************************************************** String _$genericWebsiteServiceHash() => - r'7891376773d7e6a61eeab37e0e92bb21f1acd8e3'; + r'663759beb3ae7448f4d60339557ba11c1a3a687d'; /// See also [GenericWebsiteService]. @ProviderFor(GenericWebsiteService) diff --git a/app/lib/features/bangs/data/services/data_source.dart b/app/lib/features/bangs/data/services/data_source.dart index cc56272b..f37a275d 100644 --- a/app/lib/features/bangs/data/services/data_source.dart +++ b/app/lib/features/bangs/data/services/data_source.dart @@ -12,21 +12,20 @@ part 'data_source.g.dart'; @Riverpod() class BangDataSourceService extends _$BangDataSourceService { - late http.Client _client; - @override - void build() { - _client = http.Client(); - } + void build() {} Future>> getBangs(Uri url, BangGroup? group) async { return Result.fromAsync(() async { - final response = await _client - .get(url) - .timeout(const Duration(seconds: 30)); - return await compute((args) => jsonDecode(utf8.decode(args[0])) as List, [ - response.bodyBytes, - ]).then( + return await compute((args) async { + final client = http.Client(); + final url = Uri.parse(args[0]); + final response = await client + .get(url) + .timeout(const Duration(seconds: 30)); + + return jsonDecode(utf8.decode(response.bodyBytes)) as List; + }, [url.toString()]).then( (json) => json.map((e) { var bang = Bang.fromJson(e as Map); diff --git a/app/lib/features/bangs/data/services/data_source.g.dart b/app/lib/features/bangs/data/services/data_source.g.dart index a674180d..3ebd0564 100644 --- a/app/lib/features/bangs/data/services/data_source.g.dart +++ b/app/lib/features/bangs/data/services/data_source.g.dart @@ -7,7 +7,7 @@ part of 'data_source.dart'; // ************************************************************************** String _$bangDataSourceServiceHash() => - r'fb00762858a2878505c14e2b1a0f26c1b2f60d7d'; + r'883fd708053523def4a5bc966c0b6ad88e085215'; /// See also [BangDataSourceService]. @ProviderFor(BangDataSourceService)