This commit is contained in:
kodjomoustapha 2024-03-27 15:35:35 +01:00
parent 33410544f0
commit 1d9150b3bb
8 changed files with 77 additions and 32 deletions

View file

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:flutter_qjs/flutter_qjs.dart';
import 'package:mangayomi/eval/dart/model/m_bridge.dart';
import 'package:mangayomi/eval/javascript/http.dart';
import 'package:mangayomi/models/video.dart';
class JsVideosExtractors {
@ -25,16 +26,27 @@ class JsVideosExtractors {
return (await MBridge.vidBomExtractor(args[0])).encodeToJson();
});
runtime.onMessage('streamlareExtractor', (dynamic args) async {
return (await MBridge.streamlareExtractor(args[0], args[1], args[2]))
return (await MBridge.streamlareExtractor(
args[0], args[1] ?? "", args[2] ?? ""))
.encodeToJson();
});
runtime.onMessage('sendVidExtractor', (dynamic args) async {
return (await MBridge.sendVidExtractor(args[0], args[1], args[2] ?? ""))
return (await MBridge.sendVidExtractor(
args[0],
args[1] != null
? jsonEncode((args[1] as Map?).toMapStringString)
: null,
args[2] ?? ""))
.encodeToJson();
});
runtime.onMessage('yourUploadExtractor', (dynamic args) async {
return (await MBridge.yourUploadExtractor(
args[0], args[1], args[2], args[3] ?? ""))
args[0],
args[1] != null
? jsonEncode((args[1] as Map?).toMapStringString)
: null,
args[2],
args[3] ?? ""))
.encodeToJson();
});
runtime.onMessage('gogoCdnExtractor', (dynamic args) async {
@ -49,7 +61,12 @@ class JsVideosExtractors {
});
runtime.onMessage('mp4UploadExtractor', (dynamic args) async {
return (await MBridge.mp4UploadExtractor(
args[0], args[1], args[2], args[3] ?? ""))
args[0],
args[1] != null
? jsonEncode((args[1] as Map?).toMapStringString)
: null,
args[2] ?? "",
args[3] ?? ""))
.encodeToJson();
});
runtime.onMessage('streamWishExtractor', (dynamic args) async {

View file

@ -21,7 +21,8 @@ class JsHttpClient {
source: null,
reqcopyWith: (args[1] as Map?)?.toMapStringDynamic)
.post(Uri.parse(args[2]),
headers: (args[3] as Map?)?.toMapStringString, body: args[4]))
headers: (args[3] as Map?)?.toMapStringString,
body: jsonEncode((args[4] as Map?)?.toMapStringDynamic)))
.toJson());
});
runtime.onMessage('http_put', (dynamic args) async {
@ -40,7 +41,7 @@ class JsHttpClient {
Uri.parse(args[0]),
headers: (args[1] as Map?)?.map(
(key, value) => MapEntry(key.toString(), value.toString())),
body: args[2]))
body: jsonEncode((args[2] as Map?)?.toMapStringDynamic)))
.toJson());
});
runtime.onMessage('http_patch', (dynamic args) async {

View file

@ -94,7 +94,7 @@ var extention = new DefaultExtension();
Future<MManga> getDetail(String url) async {
_init();
final res = (await runtime.handlePromise(await runtime
.evaluateAsync('jsonStringify(() => extention.getDetail("$url"))')))
.evaluateAsync('jsonStringify(() => extention.getDetail(`$url`))')))
.stringResult;
return MManga.fromJson(jsonDecode(res));
}
@ -102,7 +102,7 @@ var extention = new DefaultExtension();
Future<List<String>> getPageList(String url) async {
_init();
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.getPageList("$url"))')))
'jsonStringify(() => extention.getPageList(`$url`))')))
.stringResult;
return jsonDecode(res);
@ -111,10 +111,16 @@ var extention = new DefaultExtension();
Future<List<Video>> getVideoList(String url) async {
_init();
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.getVideoList("$url"))')))
'jsonStringify(() => extention.getVideoList(`$url`))')))
.stringResult;
return (jsonDecode(res) as List).map((e) => Video.fromJson(e)).toList();
return (jsonDecode(res) as List)
.where((element) =>
element['url'] != null && element['originalUrl'] != null)
.map((e) => Video.fromJson(e))
.toList()
.toSet()
.toList();
}
dynamic getFilterList() {

View file

@ -39,28 +39,42 @@ console.log = function (message) {
}
sendMessage("log", JSON.stringify([message.toString()]));
};
function substringAfter(text, pattern) {
const startIndex = text.indexOf(pattern);
if (startIndex === -1) return text.substring(0);
String.prototype.substringAfter = function(pattern) {
const startIndex = this.indexOf(pattern);
if (startIndex === -1) return this.substring(0);
const start = startIndex + pattern.length;
return text.substring(start);
return this.substring(start);
}
function substringBefore(text, pattern) {
const endIndex = text.indexOf(pattern);
if (endIndex === -1) return text.substring(0);
return text.substring(0, endIndex);
String.prototype.substringAfterLast = function(pattern) {
return this.split(pattern).pop();
}
function substringBeforeLast(text, pattern) {
const endIndex = text.lastIndexOf(pattern);
if (endIndex === -1) return text.substring(0);
return text.substring(0, endIndex);
String.prototype.substringBefore = function(pattern) {
const endIndex = this.indexOf(pattern);
if (endIndex === -1) return this.substring(0);
return this.substring(0, endIndex);
}
function substringAfterLast(text, pattern) {
return text.split(pattern).pop();
String.prototype.substringBeforeLast = function(pattern) {
const endIndex = this.lastIndexOf(pattern);
if (endIndex === -1) return this.substring(0);
return this.substring(0, endIndex);
}
String.prototype.substringBetween = function(left, right) {
let startIndex = 0;
let index = this.indexOf(left, startIndex);
if (index === -1) return "";
let leftIndex = index + left.length;
let rightIndex = this.indexOf(right, leftIndex);
if (rightIndex === -1) return "";
startIndex = rightIndex + right.length;
return this.substring(leftIndex, rightIndex);
}
function cryptoHandler(text, iv, secretKeyString, encrypt) {
return sendMessage(
"cryptoHandler",

View file

@ -12,7 +12,7 @@ class Video {
{this.headers, this.subtitles, this.audios});
factory Video.fromJson(Map<String, dynamic> json) {
return Video(json['url'], json['quality'], json['originalUrl'],
headers: (json['headers'] as Map?).toMapStringString,
headers: (json['headers'] as Map?)?.toMapStringString,
subtitles: json['subtitles'] != null
? (json['subtitles'] as List).map((e) => Track.fromJson(e)).toList()
: [],

View file

@ -224,10 +224,16 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
.toList();
isar.writeTxnSync(() {
if (!useTestSourceCode) {
isar.sources.putSync(widget.source
..sourceCode = ""
..isAdded = false
..isPinned = false);
if (source.isObsolete ?? false) {
isar.sources.deleteSync(
widget.source.id!);
} else {
isar.sources
.putSync(widget.source
..sourceCode = ""
..isAdded = false
..isPinned = false);
}
}
isar.sourcePreferences
.deleteAllSync(sourcePrefsIds);

View file

@ -174,6 +174,7 @@ class _CreateExtensionState extends State<CreateExtension> {
isNsfw: _isNsfw)
..sourceCodeLanguage = _sourceCodeLanguage;
source = source
..isLocal = true
..sourceCode = _sourceCodeLanguage ==
SourceCodeLanguage.dart
? _dartTemplate
@ -284,7 +285,7 @@ TestSource main(MSource source) {
}''';
String _jsSample(Source source) => '''
const sources = [{
const mangayomiSources = [{
"name": "${source.name}",
"lang": "${source.lang}",
"baseUrl": "${source.baseUrl}",
@ -297,7 +298,7 @@ const sources = [{
"apiUrl": "",
"dateFormat": "",
"dateFormatLocale": "",
"pkgName": "en/madara"
"pkgName": ""
}];
class DefaultExtension extends MProvider {

View file

@ -144,8 +144,8 @@ Future<void> fetchSourcesList(
}
}
}
checkIfSourceIsObsolete(sourceList, isManga);
});
checkIfSourceIsObsolete(sourceList, isManga);
}
void checkIfSourceIsObsolete(List<Source> sourceList, bool isManga) {