mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
refactor: simplify filter parsing logic & pass client cookie to mihon server
This commit is contained in:
parent
f2fbaf5ec5
commit
6a099415db
2 changed files with 114 additions and 71 deletions
|
|
@ -7,7 +7,9 @@ import 'package:mangayomi/eval/model/m_chapter.dart';
|
|||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/page.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/m_client.dart';
|
||||
|
|
@ -55,7 +57,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as Map<String, dynamic>;
|
||||
final pages = MangaPages.fromJson(data, source.itemType);
|
||||
return MPages(
|
||||
|
|
@ -90,7 +94,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as Map<String, dynamic>;
|
||||
final pages = MangaPages.fromJson(data, source.itemType);
|
||||
return MPages(
|
||||
|
|
@ -126,7 +132,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as Map<String, dynamic>;
|
||||
final pages = MangaPages.fromJson(data, source.itemType);
|
||||
return MPages(
|
||||
|
|
@ -161,7 +169,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as Map<String, dynamic>;
|
||||
final chapters = await getChapterList(url);
|
||||
return MManga(
|
||||
|
|
@ -196,7 +206,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as List;
|
||||
return data
|
||||
.map(
|
||||
|
|
@ -222,7 +234,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as List;
|
||||
return data.map((e) => PageUrl(e['imageUrl'])).toList();
|
||||
}
|
||||
|
|
@ -237,7 +251,9 @@ class MihonExtensionService implements ExtensionService {
|
|||
"preferences": getSourcePreferences(),
|
||||
"data": source.sourceCode,
|
||||
}),
|
||||
headers: getCookie(),
|
||||
);
|
||||
hasError(res);
|
||||
final data = jsonDecode(res.body) as List;
|
||||
return data.map((e) {
|
||||
final tempHeaders =
|
||||
|
|
@ -336,4 +352,26 @@ class MihonExtensionService implements ExtensionService {
|
|||
}
|
||||
}).toList();
|
||||
}
|
||||
|
||||
Map<String, String> getCookie() {
|
||||
final userAgent = isar.settings.getSync(227)!.userAgent;
|
||||
return {
|
||||
...MClient.getCookiesPref(source.baseUrl!),
|
||||
if (userAgent != null) 'user-agent': userAgent,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void hasError(Response response) {
|
||||
try {
|
||||
final errorMessage = jsonDecode(response.body)['error'];
|
||||
final code = jsonDecode(response.body)['code'];
|
||||
if (errorMessage != null && code != null) {
|
||||
throw "errorMessage: $errorMessage \n\n\nstatusCode: $code";
|
||||
}
|
||||
} catch (e) {
|
||||
if (e.toString().startsWith('errorMessage:')) {
|
||||
throw e.toString().replaceFirst('errorMessage: ', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -371,82 +371,87 @@ Future<FilterList?> fetchFilterListDalvik(
|
|||
body: jsonEncode({"method": "filters$name", "data": source.sourceCode}),
|
||||
);
|
||||
final data = jsonDecode(res.body) as List;
|
||||
final filters = data.expand((e) sync* {
|
||||
if (e['name'] is String &&
|
||||
e['state'] is Map<String, dynamic> &&
|
||||
e['values'] is List) {
|
||||
yield SortFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
SortState(e['state']['index'], e['state']['ascending'], null),
|
||||
(e['values'] as List)
|
||||
.map((e) => SelectFilterOption(e, e, null))
|
||||
.toList(),
|
||||
null,
|
||||
);
|
||||
} else if (e['name'] is String &&
|
||||
e['state'] is int &&
|
||||
(e['values'] is List || e['vals'] is List)) {
|
||||
yield SelectFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
e['state'],
|
||||
e['vals'] is List
|
||||
? (e['vals'] as List)
|
||||
.map(
|
||||
(e) => SelectFilterOption(e['first'], e['second'], null),
|
||||
)
|
||||
.toList()
|
||||
: e['values'] is List
|
||||
? (e['values'] as List)
|
||||
.map((e) => SelectFilterOption(e, e, null))
|
||||
.toList()
|
||||
: [],
|
||||
"SelectFilter",
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is List) {
|
||||
yield GroupFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
(e['state'] as List).map((e) {
|
||||
if (e['included'] is bool &&
|
||||
e['ignored'] is bool &&
|
||||
e['excluded'] is bool) {
|
||||
return TriStateFilter(
|
||||
null,
|
||||
e['name'],
|
||||
e['id'] ?? e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
}
|
||||
return CheckBoxFilter(
|
||||
null,
|
||||
e['name'],
|
||||
e['id'] ?? e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
}).toList(),
|
||||
"GroupFilter",
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is String) {
|
||||
yield TextFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is int) {
|
||||
yield HeaderFilter(e['name'], "${e['name']}Filter");
|
||||
}
|
||||
}).toList();
|
||||
return FilterList(filters);
|
||||
|
||||
return FilterList(filtersFromJson(data));
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
List<dynamic> filtersFromJson(List<dynamic> json) {
|
||||
return json.expand((e) sync* {
|
||||
if (e['name'] is String &&
|
||||
e['state'] is Map<String, dynamic> &&
|
||||
e['values'] is List) {
|
||||
yield SortFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
SortState(e['state']['index'], e['state']['ascending'], null),
|
||||
(e['values'] as List)
|
||||
.map((e) => SelectFilterOption(e, e, null))
|
||||
.toList(),
|
||||
null,
|
||||
);
|
||||
} else if (e['name'] is String &&
|
||||
e['state'] is int &&
|
||||
(e['values'] is List || e['vals'] is List)) {
|
||||
yield SelectFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
e['state'],
|
||||
e['vals'] is List
|
||||
? (e['vals'] as List)
|
||||
.map((e) => SelectFilterOption(e['first'], e['second'], null))
|
||||
.toList()
|
||||
: e['values'] is List
|
||||
? (e['values'] as List)
|
||||
.map(
|
||||
(e) => (e is Map)
|
||||
? SelectFilterOption(e['value'], e['value'], null)
|
||||
: SelectFilterOption(e, e, null),
|
||||
)
|
||||
.toList()
|
||||
: [],
|
||||
"SelectFilter",
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is bool) {
|
||||
yield CheckBoxFilter(
|
||||
null,
|
||||
e['name'],
|
||||
e['id'] ?? e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
} else if (e['included'] is bool &&
|
||||
e['ignored'] is bool &&
|
||||
e['excluded'] is bool) {
|
||||
yield TriStateFilter(
|
||||
null,
|
||||
e['name'],
|
||||
e['id'] ?? e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is List) {
|
||||
yield GroupFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
filtersFromJson((e['state'] as List)),
|
||||
"GroupFilter",
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is String) {
|
||||
yield TextFilter(
|
||||
"${e['name']}Filter",
|
||||
e['name'],
|
||||
null,
|
||||
state: e['state'],
|
||||
);
|
||||
} else if (e['name'] is String && e['state'] is int) {
|
||||
yield HeaderFilter(e['name'], "${e['name']}Filter");
|
||||
}
|
||||
}).toList();
|
||||
}
|
||||
|
||||
Future<List<SourcePreference>?> fetchPreferencesDalvik(
|
||||
InterceptedClient client,
|
||||
Source source,
|
||||
|
|
|
|||
Loading…
Reference in a new issue