anime(anizone): optimize search filter handling

This commit is contained in:
Moustapha Kodjo Amadou
2025-05-08 18:35:07 +01:00
parent 3ecb077330
commit c5d434b43b
2 changed files with 20 additions and 22 deletions

View File

@@ -53,15 +53,6 @@ class AniZone extends MProvider {
Future<MPages> search(String query, int page, FilterList filterList) async { Future<MPages> search(String query, int page, FilterList filterList) async {
String baseUrl = "${source.baseUrl}/filter?keyword=$query"; String baseUrl = "${source.baseUrl}/filter?keyword=$query";
Map<String, List<String>> filterMap = {
"type": [],
"status": [],
"season": [],
"lang": [],
"genre": [],
};
// Regroupement des filtres avec une logique générique
final filterHandlers = { final filterHandlers = {
"TypeFilter": "type", "TypeFilter": "type",
"LanguageFilter": "lang", "LanguageFilter": "lang",
@@ -70,23 +61,30 @@ class AniZone extends MProvider {
"GenreFilter": "genre", "GenreFilter": "genre",
}; };
final activeFilterParams = <String, String>{};
for (var filter in filterList.filters) { for (var filter in filterList.filters) {
if (filterHandlers.containsKey(filter.type)) { final paramKey = filterHandlers[filter.type];
var key = filterHandlers[filter.type]!; if (paramKey != null && filter.state is List) {
for (var stateItem in filter.state as List) { final selectedValues =
if (stateItem.state == true) { (filter.state as List)
filterMap[key]?.add(stateItem.value as String); .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 if (activeFilterParams.isNotEmpty) {
for (var entry in filterMap.entries) { final queryString = activeFilterParams.entries
List<String> values = entry.value; .map((entry) => '${Uri.encodeComponent(entry.key)}=${entry.value}')
if (values.isNotEmpty) { .join('&');
baseUrl += '&${entry.key}=${values.join("%2C")}'; baseUrl += '&$queryString';
}
} }
return _getMangaList("$baseUrl&page=$page"); return _getMangaList("$baseUrl&page=$page");

View File

@@ -1,7 +1,7 @@
import '../../../../../model/source.dart'; import '../../../../../model/source.dart';
Source get aniZoneSource => _aniZoneSource; Source get aniZoneSource => _aniZoneSource;
const _aniZoneVersion = "0.0.2"; const _aniZoneVersion = "0.0.25";
const _aniZoneSourceCodeUrl = const _aniZoneSourceCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/anizone.dart"; "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/anizone/anizone.dart";
Source _aniZoneSource = Source( Source _aniZoneSource = Source(