Skip to content

Commit e007834

Browse files
committed
chore: update mangayomi stuff
1 parent 25dee8a commit e007834

File tree

10 files changed

+1124
-248
lines changed

10 files changed

+1124
-248
lines changed

lib/api/Mangayomi/Eval/dart/bridge/m_provider.dart

Lines changed: 242 additions & 137 deletions
Large diffs are not rendered by default.

lib/api/Mangayomi/Eval/dart/model/m_bridge.dart

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import '../../../anime_extractors/gogocdn_extractor.dart';
2020
import '../../../anime_extractors/mp4upload_extractor.dart';
2121
import '../../../anime_extractors/mytv_extractor.dart';
2222
import '../../../anime_extractors/okru_extractor.dart';
23+
import '../../../anime_extractors/quarkuc_extractor.dart';
2324
import '../../../anime_extractors/sendvid_extractor.dart';
2425
import '../../../anime_extractors/sibnet_extractor.dart';
2526
import '../../../anime_extractors/streamlare_extractor.dart';
@@ -79,7 +80,7 @@ class MBridge {
7980
//Return one attr
8081
else if (query.nodes.length == 1) {
8182
String attr =
82-
query.attr != null ? query.attr!.trim().trimLeft().trimRight() : "";
83+
query.attr != null ? query.attr!.trim().trimLeft().trimRight() : "";
8384
if (attr.isNotEmpty) {
8485
attrs = [attr];
8586
}
@@ -284,7 +285,7 @@ class MBridge {
284285
date,
285286
dateFormat,
286287
dateFormatLocale,
287-
(val) {
288+
(val) {
288289
dateFormat = val.$1;
289290
dateFormatLocale = val.$2;
290291
error = val.$3;
@@ -344,6 +345,34 @@ class MBridge {
344345
.videosFromUrl(url, newHeaders, prefix: prefix, suffix: suffix);
345346
}
346347

348+
static Future<List<Map<String, String>>> quarkFilesExtractor(
349+
List<String> url, String cookie) async {
350+
QuarkUcExtractor quark = QuarkUcExtractor();
351+
await quark.initCloudDrive(cookie, CloudDriveType.quark);
352+
return await quark.videoFilesFromUrl(url);
353+
}
354+
355+
static Future<List<Map<String, String>>> ucFilesExtractor(
356+
List<String> url, String cookie) async {
357+
QuarkUcExtractor uc = QuarkUcExtractor();
358+
await uc.initCloudDrive(cookie, CloudDriveType.uc);
359+
return await uc.videoFilesFromUrl(url);
360+
}
361+
362+
static Future<List<Video>> quarkVideosExtractor(
363+
String url, String cookie) async {
364+
QuarkUcExtractor quark = QuarkUcExtractor();
365+
await quark.initCloudDrive(cookie, CloudDriveType.quark);
366+
return await quark.videosFromUrl(url);
367+
}
368+
369+
static Future<List<Video>> ucVideosExtractor(
370+
String url, String cookie) async {
371+
QuarkUcExtractor uc = QuarkUcExtractor();
372+
await uc.initCloudDrive(cookie, CloudDriveType.uc);
373+
return await uc.videosFromUrl(url);
374+
}
375+
347376
static Future<List<Video>> streamTapeExtractor(
348377
String url, String? quality) async {
349378
return await StreamTapeExtractor()
@@ -405,7 +434,7 @@ class MBridge {
405434
]).anyWordIn(date)) {
406435
return cal.subtract(Duration(hours: number)).millisecondsSinceEpoch;
407436
} else if (WordSet(
408-
["menit", "dakika", "min", "minute", "minuto", "นาที", "دقائق"])
437+
["menit", "dakika", "min", "minute", "minuto", "นาที", "دقائق"])
409438
.anyWordIn(date)) {
410439
return cal.subtract(Duration(minutes: number)).millisecondsSinceEpoch;
411440
} else if (WordSet(["detik", "segundo", "second", "วินาที", "sec"])
@@ -445,8 +474,8 @@ class MBridge {
445474
final cleanedDate = date
446475
.split(" ")
447476
.map((it) => it.contains(RegExp(r"\d\D\D"))
448-
? it.replaceAll(RegExp(r"\D"), "")
449-
: it)
477+
? it.replaceAll(RegExp(r"\D"), "")
478+
: it)
450479
.join(" ");
451480
return DateFormat(dateFormat, dateFormatLocale)
452481
.parse(cleanedDate)
@@ -487,8 +516,8 @@ class MBridge {
487516
final cleanedDate = date
488517
.split(" ")
489518
.map((it) => it.contains(RegExp(r"\d\D\D"))
490-
? it.replaceAll(RegExp(r"\D"), "")
491-
: it)
519+
? it.replaceAll(RegExp(r"\D"), "")
520+
: it)
492521
.join(" ");
493522
return DateFormat(dateFormat, locale)
494523
.parse(cleanedDate)

lib/api/Mangayomi/Eval/javascript/extractors.dart

Lines changed: 62 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'http.dart';
88

99
class JsVideosExtractors {
1010
late JavascriptRuntime runtime;
11-
1211
JsVideosExtractors(this.runtime);
1312

1413
void init() {
@@ -28,28 +27,43 @@ class JsVideosExtractors {
2827
runtime.onMessage('vidBomExtractor', (dynamic args) async {
2928
return (await MBridge.vidBomExtractor(args[0])).encodeToJson();
3029
});
30+
runtime.onMessage('quarkVideosExtractor', (dynamic args) async {
31+
return (await MBridge.quarkVideosExtractor(args[0], args[1]))
32+
.encodeToJson();
33+
});
34+
runtime.onMessage('ucVideosExtractor', (dynamic args) async {
35+
return (await MBridge.ucVideosExtractor(args[0], args[1])).encodeToJson();
36+
});
37+
runtime.onMessage('quarkFilesExtractor', (dynamic args) async {
38+
List<String> urls = (args[0] as List).cast<String>();
39+
return (await MBridge.quarkFilesExtractor(urls, args[1]));
40+
});
41+
runtime.onMessage('ucFilesExtractor', (dynamic args) async {
42+
List<String> urls = (args[0] as List).cast<String>();
43+
return (await MBridge.ucFilesExtractor(urls, args[1]));
44+
});
3145
runtime.onMessage('streamlareExtractor', (dynamic args) async {
3246
return (await MBridge.streamlareExtractor(
33-
args[0], args[1] ?? "", args[2] ?? ""))
47+
args[0], args[1] ?? "", args[2] ?? ""))
3448
.encodeToJson();
3549
});
3650
runtime.onMessage('sendVidExtractor', (dynamic args) async {
3751
return (await MBridge.sendVidExtractor(
38-
args[0],
39-
args[1] != null
40-
? jsonEncode((args[1] as Map?).toMapStringString)
41-
: null,
42-
args[2] ?? ""))
52+
args[0],
53+
args[1] != null
54+
? jsonEncode((args[1] as Map?).toMapStringString)
55+
: null,
56+
args[2] ?? ""))
4357
.encodeToJson();
4458
});
4559
runtime.onMessage('yourUploadExtractor', (dynamic args) async {
4660
return (await MBridge.yourUploadExtractor(
47-
args[0],
48-
args[1] != null
49-
? jsonEncode((args[1] as Map?).toMapStringString)
50-
: null,
51-
args[2],
52-
args[3] ?? ""))
61+
args[0],
62+
args[1] != null
63+
? jsonEncode((args[1] as Map?).toMapStringString)
64+
: null,
65+
args[2],
66+
args[3] ?? ""))
5367
.encodeToJson();
5468
});
5569
runtime.onMessage('gogoCdnExtractor', (dynamic args) async {
@@ -64,12 +78,12 @@ class JsVideosExtractors {
6478
});
6579
runtime.onMessage('mp4UploadExtractor', (dynamic args) async {
6680
return (await MBridge.mp4UploadExtractor(
67-
args[0],
68-
args[1] != null
69-
? jsonEncode((args[1] as Map?).toMapStringString)
70-
: null,
71-
args[2] ?? "",
72-
args[3] ?? ""))
81+
args[0],
82+
args[1] != null
83+
? jsonEncode((args[1] as Map?).toMapStringString)
84+
: null,
85+
args[2] ?? "",
86+
args[3] ?? ""))
7387
.encodeToJson();
7488
});
7589
runtime.onMessage('streamWishExtractor', (dynamic args) async {
@@ -78,7 +92,7 @@ class JsVideosExtractors {
7892
});
7993
runtime.onMessage('filemoonExtractor', (dynamic args) async {
8094
return (await MBridge.filemoonExtractor(
81-
args[0], args[1] ?? "", args[2] ?? ""))
95+
args[0], args[1] ?? "", args[2] ?? ""))
8296
.encodeToJson();
8397
});
8498

@@ -181,6 +195,34 @@ async function filemoonExtractor(url, prefix, suffix) {
181195
);
182196
return JSON.parse(result);
183197
}
198+
async function quarkVideosExtractor(url, cookie) {
199+
const result = await sendMessage(
200+
"quarkVideosExtractor",
201+
JSON.stringify([url, cookie])
202+
);
203+
return JSON.parse(result);
204+
}
205+
async function ucVideosExtractor(url, cookie) {
206+
const result = await sendMessage(
207+
"ucVideosExtractor",
208+
JSON.stringify([url, cookie])
209+
);
210+
return JSON.parse(result);
211+
}
212+
async function quarkFilesExtractor(urls, cookie) {
213+
const result = await sendMessage(
214+
"quarkFilesExtractor",
215+
JSON.stringify([urls, cookie])
216+
);
217+
return result;
218+
}
219+
async function ucFilesExtractor(urls, cookie) {
220+
const result = await sendMessage(
221+
"ucFilesExtractor",
222+
JSON.stringify([urls, cookie])
223+
);
224+
return result;
225+
}
184226
''');
185227
}
186228
}

lib/api/Mangayomi/Eval/javascript/http.dart

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import 'dart:convert';
2+
import 'dart:io';
23

34
import 'package:flutter_qjs/flutter_qjs.dart';
45
import 'package:http_interceptor/http_interceptor.dart';
5-
6+
import 'package:http/http.dart' as http;
67
import '../../http/m_client.dart';
78

89
class JsHttpClient {
910
late JavascriptRuntime runtime;
10-
1111
JsHttpClient(this.runtime);
1212

1313
void init() {
@@ -17,33 +17,19 @@ class JsHttpClient {
1717
}
1818

1919
runtime.onMessage('http_get', (dynamic args) async {
20-
return jsonEncode((await client(args[1]).get(Uri.parse(args[2]),
21-
headers: (args[3] as Map?)?.toMapStringString))
22-
.toJson());
20+
return await _toHttpResponse(client(args[1]), "GET", args);
2321
});
2422
runtime.onMessage('http_post', (dynamic args) async {
25-
return jsonEncode((await client(args[1]).post(Uri.parse(args[2]),
26-
headers: (args[3] as Map?)?.toMapStringString,
27-
body: (args[4] as Map?)?.toMapStringString))
28-
.toJson());
23+
return await _toHttpResponse(client(args[1]), "POST", args);
2924
});
3025
runtime.onMessage('http_put', (dynamic args) async {
31-
return (await client(args[1]).put(Uri.parse(args[2]),
32-
headers: (args[3] as Map?)?.toMapStringString, body: args[4]))
33-
.toJson();
26+
return await _toHttpResponse(client(args[1]), "PUT", args);
3427
});
3528
runtime.onMessage('http_delete', (dynamic args) async {
36-
return jsonEncode((await client(args[1]).delete(Uri.parse(args[2]),
37-
headers: (args[3] as Map?)?.map(
38-
(key, value) => MapEntry(key.toString(), value.toString())),
39-
body: (args[4] as Map?)?.toMapStringString))
40-
.toJson());
29+
return await _toHttpResponse(client(args[1]), "DELETE", args);
4130
});
4231
runtime.onMessage('http_patch', (dynamic args) async {
43-
return jsonEncode((await client(args[1]).patch(Uri.parse(args[2]),
44-
headers: (args[3] as Map?)?.toMapStringString,
45-
body: (args[4] as Map?)?.toMapStringString))
46-
.toJson());
32+
return await _toHttpResponse(client(args[1]), "PATCH", args);
4733
});
4834
runtime.evaluate('''
4935
class Client {
@@ -95,25 +81,57 @@ class Client {
9581
}
9682
}
9783

84+
Future<String> _toHttpResponse(Client client, String method, List args) async {
85+
final url = args[2] as String;
86+
final headers = (args[3] as Map?)?.toMapStringString;
87+
final body = args.length >= 5 ? (args[4] as Map?)?.toMapStringDynamic : null;
88+
var request = http.Request(method, Uri.parse(url));
89+
request.headers.addAll(headers ?? {});
90+
if ((request.headers[HttpHeaders.contentTypeHeader]
91+
?.contains("application/json")) ??
92+
false) {
93+
request.body = json.encode(body);
94+
request.headers.addAll(headers ?? {});
95+
http.StreamedResponse response = await client.send(request);
96+
final res = Response("", response.statusCode,
97+
request: response.request,
98+
headers: response.headers,
99+
isRedirect: response.isRedirect,
100+
persistentConnection: response.persistentConnection,
101+
reasonPhrase: response.reasonPhrase);
102+
Map<String, dynamic> resMap = res.toJson();
103+
resMap["body"] = await response.stream.bytesToString();
104+
return jsonEncode(resMap);
105+
}
106+
final future = switch (method) {
107+
"GET" => client.get(Uri.parse(url), headers: headers),
108+
"POST" => client.post(Uri.parse(url), headers: headers, body: body),
109+
"PUT" => client.put(Uri.parse(url), headers: headers, body: body),
110+
"DELETE" => client.delete(Uri.parse(url), headers: headers, body: body),
111+
_ => client.patch(Uri.parse(url), headers: headers, body: body),
112+
};
113+
return jsonEncode((await future).toJson());
114+
}
115+
98116
extension ResponseExtexsion on Response {
99117
Map<String, dynamic> toJson() => {
100-
'body': body,
101-
'headers': headers,
102-
'isRedirect': isRedirect,
103-
'persistentConnection': persistentConnection,
104-
'reasonPhrase': reasonPhrase,
105-
'statusCode': statusCode,
106-
'request': {
107-
'contentLength': request?.contentLength,
108-
'finalized': request?.finalized,
109-
'followRedirects': request?.followRedirects,
110-
'headers': request?.headers,
111-
'maxRedirects': request?.maxRedirects,
112-
'method': request?.method,
113-
'persistentConnection': request?.persistentConnection,
114-
'url': request?.url.toString()
115-
}
116-
};
118+
'body': body,
119+
'headers': headers,
120+
'isRedirect': isRedirect,
121+
'persistentConnection': persistentConnection,
122+
'reasonPhrase': reasonPhrase,
123+
'statusCode': statusCode,
124+
'request': {
125+
'contentLength': request?.contentLength,
126+
'finalized': request?.finalized,
127+
'followRedirects': request?.followRedirects,
128+
'headers': request?.headers,
129+
'maxRedirects': request?.maxRedirects,
130+
'method': request?.method,
131+
'persistentConnection': request?.persistentConnection,
132+
'url': request?.url.toString()
133+
}
134+
};
117135
}
118136

119137
extension ToMapExtension on Map? {

0 commit comments

Comments
 (0)