From c5d434b43b926c32b9b3dca2b55395e13aed80ec Mon Sep 17 00:00:00 2001 From: Moustapha Kodjo Amadou <107993382+kodjodevf@users.noreply.github.com> Date: Thu, 8 May 2025 18:35:07 +0100 Subject: [PATCH] anime(anizone): optimize search filter handling --- dart/anime/src/fr/anizone/anizone.dart | 40 ++++++++++++-------------- dart/anime/src/fr/anizone/source.dart | 2 +- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/dart/anime/src/fr/anizone/anizone.dart b/dart/anime/src/fr/anizone/anizone.dart index 982d17b6..6e1241f0 100644 --- a/dart/anime/src/fr/anizone/anizone.dart +++ b/dart/anime/src/fr/anizone/anizone.dart @@ -53,15 +53,6 @@ class AniZone extends MProvider { Future search(String query, int page, FilterList filterList) async { String baseUrl = "${source.baseUrl}/filter?keyword=$query"; - Map> filterMap = { - "type": [], - "status": [], - "season": [], - "lang": [], - "genre": [], - }; - - // Regroupement des filtres avec une logique générique final filterHandlers = { "TypeFilter": "type", "LanguageFilter": "lang", @@ -70,23 +61,30 @@ class AniZone extends MProvider { "GenreFilter": "genre", }; + final activeFilterParams = {}; + for (var filter in filterList.filters) { - if (filterHandlers.containsKey(filter.type)) { - var key = filterHandlers[filter.type]!; - for (var stateItem in filter.state as List) { - if (stateItem.state == true) { - filterMap[key]?.add(stateItem.value as String); - } + final paramKey = filterHandlers[filter.type]; + if (paramKey != null && filter.state is List) { + final selectedValues = + (filter.state as List) + .where((item) { + return item.state == true && item.value != null; + }) + .map((item) => item.value as String) + .toList(); + + if (selectedValues.isNotEmpty) { + activeFilterParams[paramKey] = selectedValues.join("%2C"); } } } - //add filters to the url dynamically - for (var entry in filterMap.entries) { - List values = entry.value; - if (values.isNotEmpty) { - baseUrl += '&${entry.key}=${values.join("%2C")}'; - } + if (activeFilterParams.isNotEmpty) { + final queryString = activeFilterParams.entries + .map((entry) => '${Uri.encodeComponent(entry.key)}=${entry.value}') + .join('&'); + baseUrl += '&$queryString'; } return _getMangaList("$baseUrl&page=$page"); diff --git a/dart/anime/src/fr/anizone/source.dart b/dart/anime/src/fr/anizone/source.dart index 81aa21c3..d3774825 100644 --- a/dart/anime/src/fr/anizone/source.dart +++ b/dart/anime/src/fr/anizone/source.dart @@ -1,7 +1,7 @@ import '../../../../../model/source.dart'; Source get aniZoneSource => _aniZoneSource; -const _aniZoneVersion = "0.0.2"; +const _aniZoneVersion = "0.0.25"; const _aniZoneSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/anizone.dart"; Source _aniZoneSource = Source(