This commit is contained in:
kodjomoustapha 2024-05-25 18:06:27 +01:00
parent 9df0fe73e1
commit 170f07e3be
5 changed files with 55 additions and 44 deletions

View file

@ -40,6 +40,13 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
'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<MProvider> {
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<MProvider> {
}
@override
Map<String, String> getHeaders(String url) {
final res = $_invoke('getHeaders', [$String(url)]);
Map<String, String> headers = {};
if (res is $Map) {
headers = res.$reified.toMapStringString!;
Map<String, String> get headers {
try {
return ($_get('headers') as Map).toMapStringString!;
} catch (e) {
return {};
}
return headers;
}
$MVideo _toMVideo(Video e) =>

View file

@ -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<dynamic> 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<String, String> 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<String, String> 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<String, String> 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<Track>? subtitles, List<Track>? audios) {
Map<String, String> 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 ?? []);

View file

@ -10,7 +10,7 @@ abstract class MProvider {
String? get baseUrl;
Map<String, String> getHeaders(String url);
Map<String, String> get headers;
Future<MPages> getLatestUpdates(int page);

View file

@ -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 {

View file

@ -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(