From 170f07e3beee5f718eee83e31991e4b27f23a497 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Sat, 25 May 2024 18:06:27 +0100 Subject: [PATCH] fix --- lib/eval/dart/bridge/m_provider.dart | 27 ++++++------- lib/eval/dart/model/m_bridge.dart | 48 ++++++++++++----------- lib/eval/dart/model/m_provider.dart | 2 +- lib/eval/dart/service.dart | 9 +++-- lib/modules/manga/reader/reader_view.dart | 13 ++++-- 5 files changed, 55 insertions(+), 44 deletions(-) diff --git a/lib/eval/dart/bridge/m_provider.dart b/lib/eval/dart/bridge/m_provider.dart index ce1a9b7..edaeec3 100644 --- a/lib/eval/dart/bridge/m_provider.dart +++ b/lib/eval/dart/bridge/m_provider.dart @@ -40,6 +40,13 @@ class $MProvider extends MProvider with $Bridge { 'baseUrl': BridgeMethodDef(BridgeFunctionDef( returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string), nullable: true))), + 'headers': BridgeMethodDef(BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef(CoreTypes.map, [ + BridgeTypeRef(CoreTypes.string), + BridgeTypeRef(CoreTypes.string) + ]), + nullable: true))), }, methods: { 'getLatestUpdates': BridgeMethodDef(BridgeFunctionDef( @@ -91,15 +98,6 @@ class $MProvider extends MProvider with $Bridge { BridgeParameter('url', BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false), ])), - 'getHeaders': BridgeMethodDef(BridgeFunctionDef( - returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.map, [ - BridgeTypeRef(CoreTypes.string), - BridgeTypeRef(CoreTypes.string) - ])), - params: [ - BridgeParameter('url', - BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false), - ])), 'getFilterList': BridgeMethodDef(BridgeFunctionDef( returns: BridgeTypeAnnotation(BridgeTypeRef( CoreTypes.list, [BridgeTypeRef(CoreTypes.dynamic)])), @@ -1045,13 +1043,12 @@ class $MProvider extends MProvider with $Bridge { } @override - Map getHeaders(String url) { - final res = $_invoke('getHeaders', [$String(url)]); - Map headers = {}; - if (res is $Map) { - headers = res.$reified.toMapStringString!; + Map get headers { + try { + return ($_get('headers') as Map).toMapStringString!; + } catch (e) { + return {}; } - return headers; } $MVideo _toMVideo(Video e) => diff --git a/lib/eval/dart/model/m_bridge.dart b/lib/eval/dart/model/m_bridge.dart index 2ddfc96..12ec9ac 100644 --- a/lib/eval/dart/model/m_bridge.dart +++ b/lib/eval/dart/model/m_bridge.dart @@ -9,6 +9,7 @@ import 'package:intl/intl.dart'; import 'package:js_packer/js_packer.dart'; import 'package:json_path/json_path.dart'; import 'package:mangayomi/eval/dart/model/document.dart'; +import 'package:mangayomi/eval/javascript/http.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/services/anime_extractors/dood_extractor.dart'; import 'package:mangayomi/services/anime_extractors/filemoon.dart'; @@ -271,19 +272,26 @@ class MBridge { val.add(element); } } - + bool error = false; List valD = []; for (var date in val) { if (date.toString().isNotEmpty) { - valD.add(parseChapterDate( - date, - dateFormat, - dateFormatLocale, - (val) { - dateFormat = val.$1; - dateFormatLocale = val.$2; - }, - )); + String dateStr = ""; + if (error) { + dateStr = DateTime.now().millisecondsSinceEpoch.toString(); + } else { + dateStr = parseChapterDate( + date, + dateFormat, + dateFormatLocale, + (val) { + dateFormat = val.$1; + dateFormatLocale = val.$2; + error = val.$3; + }, + ); + } + valD.add(dateStr); } } return valD; @@ -330,8 +338,7 @@ class MBridge { String url, String? headers, String prefix, String suffix) async { Map newHeaders = {}; if (headers != null) { - newHeaders = (jsonDecode(headers) as Map) - .map((key, value) => MapEntry(key.toString(), value.toString())); + newHeaders = (jsonDecode(headers) as Map).toMapStringString!; } return await Mp4uploadExtractor() .videosFromUrl(url, newHeaders, prefix: prefix, suffix: suffix); @@ -364,7 +371,7 @@ class MBridge { //Parse a chapter date to millisecondsSinceEpoch static String parseChapterDate(String date, String dateFormat, - String dateFormatLocale, Function((String, String)) newLocale) { + String dateFormatLocale, Function((String, String, bool)) newLocale) { int parseRelativeDate(String date) { final number = int.tryParse(RegExp(r"(\d+)").firstMatch(date)!.group(0)!); if (number == null) return 0; @@ -456,7 +463,7 @@ class MBridge { for (var locale in supportedLocales) { for (var dateFormat in _dateFormats) { - newLocale((dateFormat, locale)); + newLocale((dateFormat, locale, false)); try { initializeDateFormatting(locale); if (WordSet(["yesterday", "يوم واحد"]).startsWith(date)) { @@ -496,8 +503,8 @@ class MBridge { } catch (_) {} } } - // botToast(e.toString()); - throw Exception(e); + newLocale((dateFormat, dateFormatLocale, true)); + return DateTime.now().millisecondsSinceEpoch.toString(); } } @@ -513,8 +520,7 @@ class MBridge { String url, String? headers, String prefix) async { Map newHeaders = {}; if (headers != null) { - newHeaders = (jsonDecode(headers) as Map) - .map((key, value) => MapEntry(key.toString(), value.toString())); + newHeaders = (jsonDecode(headers) as Map).toMapStringString!; } return await SendvidExtractor(newHeaders) @@ -533,8 +539,7 @@ class MBridge { String url, String? headers, String? name, String prefix) async { Map newHeaders = {}; if (headers != null) { - newHeaders = (jsonDecode(headers) as Map) - .map((key, value) => MapEntry(key.toString(), value.toString())); + newHeaders = (jsonDecode(headers) as Map).toMapStringString!; } return await YourUploadExtractor().videosFromUrl(url, newHeaders, prefix: prefix, name: name ?? "YourUpload"); @@ -566,8 +571,7 @@ class MBridge { String? headers, List? subtitles, List? audios) { Map newHeaders = {}; if (headers != null) { - newHeaders = (jsonDecode(headers) as Map) - .map((key, value) => MapEntry(key.toString(), value.toString())); + newHeaders = (jsonDecode(headers) as Map).toMapStringString!; } return Video(url, quality, originalUrl, headers: newHeaders, subtitles: subtitles ?? [], audios: audios ?? []); diff --git a/lib/eval/dart/model/m_provider.dart b/lib/eval/dart/model/m_provider.dart index 2b0b3e6..2d52ead 100644 --- a/lib/eval/dart/model/m_provider.dart +++ b/lib/eval/dart/model/m_provider.dart @@ -10,7 +10,7 @@ abstract class MProvider { String? get baseUrl; - Map getHeaders(String url); + Map get headers; Future getLatestUpdates(int page); diff --git a/lib/eval/dart/service.dart b/lib/eval/dart/service.dart index 7255631..774cb54 100644 --- a/lib/eval/dart/service.dart +++ b/lib/eval/dart/service.dart @@ -39,16 +39,19 @@ class DartExtensionService { ); if (res is $Map) { headers = (res.$reified).toMapStringString!; + } else if (res is Map) { + headers = res.toMapStringString!; + } else { + throw ""; } - return headers; } catch (_) { try { - headers = _executeLib().getHeaders(source!.baseUrl!); + headers = _executeLib().headers; } catch (_) { return {}; } } - return {}; + return headers; } String get sourceBaseUrl { diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 4f0d9e8..9b5f50c 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -686,8 +686,11 @@ class _MangaChapterPageGalleryState LoadState.completed) { if (_failedToLoadImage.value == true) { - _failedToLoadImage.value = - false; + Future.delayed(const Duration( + milliseconds: 10)) + .then((value) => + _failedToLoadImage + .value = false); } return StreamBuilder( builder: (context, data) { @@ -717,7 +720,11 @@ class _MangaChapterPageGalleryState LoadState.failed) { if (_failedToLoadImage.value == false) { - _failedToLoadImage.value = true; + Future.delayed(const Duration( + milliseconds: 10)) + .then((value) => + _failedToLoadImage + .value = true); } return Container( color: getBackgroundColor(