mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
Fix #33
This commit is contained in:
@@ -8,27 +8,29 @@ class OtakuDesu extends MProvider {
|
|||||||
|
|
||||||
final Client client = Client(source);
|
final Client client = Client(source);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get baseUrl => getPreferenceValue(source.id, "overrideBaseUrl");
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(int page) async {
|
Future<MPages> getPopular(int page) async {
|
||||||
final res = (await client
|
final res =
|
||||||
.get(Uri.parse("${source.baseUrl}/complete-anime/page/$page")))
|
(await client.get(Uri.parse("$baseUrl/complete-anime/page/$page")))
|
||||||
.body;
|
.body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(int page) async {
|
Future<MPages> getLatestUpdates(int page) async {
|
||||||
final res = (await client
|
final res =
|
||||||
.get(Uri.parse("${source.baseUrl}/ongoing-anime/page/$page")))
|
(await client.get(Uri.parse("$baseUrl/ongoing-anime/page/$page"))).body;
|
||||||
.body;
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> search(String query, int page, FilterList filterList) async {
|
Future<MPages> search(String query, int page, FilterList filterList) async {
|
||||||
final res = (await client
|
final res =
|
||||||
.get(Uri.parse("${source.baseUrl}/?s=$query&post_type=anime")))
|
(await client.get(Uri.parse("$baseUrl/?s=$query&post_type=anime")))
|
||||||
.body;
|
.body;
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final images = xpath(res, '//ul[@class="chivsrc"]/li/img/@src');
|
final images = xpath(res, '//ul[@class="chivsrc"]/li/img/@src');
|
||||||
final names = xpath(res, '//ul[@class="chivsrc"]/li/h2/a/text()');
|
final names = xpath(res, '//ul[@class="chivsrc"]/li/h2/a/text()');
|
||||||
@@ -96,8 +98,8 @@ class OtakuDesu extends MProvider {
|
|||||||
final action = substringBefore(substringAfter(script, "action:\""), '"');
|
final action = substringBefore(substringAfter(script, "action:\""), '"');
|
||||||
|
|
||||||
final resNonceAction = (await client.post(
|
final resNonceAction = (await client.post(
|
||||||
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
|
Uri.parse("$baseUrl/wp-admin/admin-ajax.php"),
|
||||||
headers: null,
|
headers: {"_": "_"},
|
||||||
body: {"action": nonceAction}))
|
body: {"action": nonceAction}))
|
||||||
.body;
|
.body;
|
||||||
final nonce = substringBefore(substringAfter(resNonceAction, ":\""), '"');
|
final nonce = substringBefore(substringAfter(resNonceAction, ":\""), '"');
|
||||||
@@ -110,21 +112,20 @@ class OtakuDesu extends MProvider {
|
|||||||
final id = decodedData["id"];
|
final id = decodedData["id"];
|
||||||
final i = decodedData["i"];
|
final i = decodedData["i"];
|
||||||
|
|
||||||
final res = (await client.post(
|
final res = (await client
|
||||||
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
|
.post(Uri.parse("$baseUrl/wp-admin/admin-ajax.php"), headers: {
|
||||||
headers: null,
|
"_": "_"
|
||||||
body: {
|
}, body: {
|
||||||
"i": i,
|
"i": i,
|
||||||
"id": id,
|
"id": id,
|
||||||
"q": q,
|
"q": q,
|
||||||
"nonce": nonce,
|
"nonce": nonce,
|
||||||
"action": action
|
"action": action
|
||||||
}))
|
}))
|
||||||
.body;
|
.body;
|
||||||
final html = utf8.decode(
|
final html = utf8.decode(
|
||||||
base64Url.decode(substringBefore(substringAfter(res, ":\""), '"')));
|
base64Url.decode(substringBefore(substringAfter(res, ":\""), '"')));
|
||||||
String url = xpath(html, '//iframe/@src').first;
|
String url = xpath(html, '//iframe/@src').first;
|
||||||
|
|
||||||
if (url.contains("yourupload")) {
|
if (url.contains("yourupload")) {
|
||||||
final id = substringBefore(substringAfter(url, "id="), "&");
|
final id = substringBefore(substringAfter(url, "id="), "&");
|
||||||
url = "https://yourupload.com/embed/$id";
|
url = "https://yourupload.com/embed/$id";
|
||||||
@@ -132,19 +133,21 @@ class OtakuDesu extends MProvider {
|
|||||||
} else if (url.contains("filelions")) {
|
} else if (url.contains("filelions")) {
|
||||||
a = await streamWishExtractor(url, "FileLions");
|
a = await streamWishExtractor(url, "FileLions");
|
||||||
} else if (url.contains("desustream")) {
|
} else if (url.contains("desustream")) {
|
||||||
final res = (await client.get(Uri.parse(url))).body;
|
final response = (await Client().get(Uri.parse(url)));
|
||||||
|
final res = response.body;
|
||||||
final script =
|
final script =
|
||||||
xpath(res, '//script[contains(text(), "sources")]/text()').first;
|
xpath(res, '//script[contains(text(), "sources")]/text()').first;
|
||||||
final videoUrl = substringBefore(
|
final videoUrl = substringBefore(
|
||||||
substringAfter(substringAfter(script, "sources:[{"), "file':'"),
|
substringAfter(substringAfter(script, "sources:[{"), "file':'"),
|
||||||
"'");
|
"'");
|
||||||
MVideo video = MVideo();
|
if (videoUrl.endsWith(".mp4")) {
|
||||||
video
|
MVideo video = MVideo();
|
||||||
..url = videoUrl
|
video
|
||||||
..originalUrl = videoUrl
|
..url = videoUrl
|
||||||
..quality = "DesuStream - $q"
|
..originalUrl = videoUrl
|
||||||
..subtitles = [];
|
..quality = "DesuStream - $q";
|
||||||
videos.add(video);
|
videos.add(video);
|
||||||
|
}
|
||||||
} else if (url.contains("mp4upload")) {
|
} else if (url.contains("mp4upload")) {
|
||||||
final res = (await client.get(Uri.parse(url))).body;
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final script =
|
final script =
|
||||||
@@ -155,13 +158,39 @@ class OtakuDesu extends MProvider {
|
|||||||
video
|
video
|
||||||
..url = videoUrl
|
..url = videoUrl
|
||||||
..originalUrl = videoUrl
|
..originalUrl = videoUrl
|
||||||
..quality = "Mp4upload - $q"
|
..quality = "Mp4upload - $q";
|
||||||
..subtitles = [];
|
|
||||||
videos.add(video);
|
videos.add(video);
|
||||||
}
|
}
|
||||||
videos.addAll(a);
|
videos.addAll(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sortVideos(videos);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<MVideo> sortVideos(List<MVideo> videos) {
|
||||||
|
String quality = getPreferenceValue(source.id, "preferred_quality");
|
||||||
|
|
||||||
|
videos.sort((MVideo a, MVideo b) {
|
||||||
|
int qualityMatchA = 0;
|
||||||
|
if (a.quality.contains(quality)) {
|
||||||
|
qualityMatchA = 1;
|
||||||
|
}
|
||||||
|
int qualityMatchB = 0;
|
||||||
|
if (b.quality.contains(quality)) {
|
||||||
|
qualityMatchB = 1;
|
||||||
|
}
|
||||||
|
if (qualityMatchA != qualityMatchB) {
|
||||||
|
return qualityMatchB - qualityMatchA;
|
||||||
|
}
|
||||||
|
|
||||||
|
final regex = RegExp(r'(\d+)p');
|
||||||
|
final matchA = regex.firstMatch(a.quality);
|
||||||
|
final matchB = regex.firstMatch(b.quality);
|
||||||
|
final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0;
|
||||||
|
final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0;
|
||||||
|
return qualityNumB - qualityNumA;
|
||||||
|
});
|
||||||
|
|
||||||
return videos;
|
return videos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +214,26 @@ class OtakuDesu extends MProvider {
|
|||||||
res, '//div[@class="pagenavix"]/a[@class="next page-numbers"]/@href');
|
res, '//div[@class="pagenavix"]/a[@class="next page-numbers"]/@href');
|
||||||
return MPages(animeList, pages.isNotEmpty);
|
return MPages(animeList, pages.isNotEmpty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<dynamic> getSourcePreferences() {
|
||||||
|
return [
|
||||||
|
EditTextPreference(
|
||||||
|
key: "overrideBaseUrl",
|
||||||
|
title: "Override BaseUrl",
|
||||||
|
summary: "",
|
||||||
|
value: "https://otakudesu.cloud",
|
||||||
|
dialogTitle: "Override BaseUrl",
|
||||||
|
dialogMessage: "",
|
||||||
|
text: "https://otakudesu.cloud"),
|
||||||
|
ListPreference(
|
||||||
|
key: "preferred_quality",
|
||||||
|
title: "Preferred quality",
|
||||||
|
summary: "",
|
||||||
|
valueIndex: 1,
|
||||||
|
entries: ["1080p", "720p", "480p", "360p"],
|
||||||
|
entryValues: ["1080", "720", "480", "360"])
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OtakuDesu main(MSource source) {
|
OtakuDesu main(MSource source) {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get otakudesu => _otakudesu;
|
Source get otakudesu => _otakudesu;
|
||||||
const _otakudesuVersion = "0.0.45";
|
const _otakudesuVersion = "0.0.5";
|
||||||
const _otakudesuCodeUrl =
|
const _otakudesuCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/otakudesu/otakudesu.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/otakudesu/otakudesu.dart";
|
||||||
Source _otakudesu = Source(
|
Source _otakudesu = Source(
|
||||||
name: "OtakuDesu",
|
name: "OtakuDesu",
|
||||||
baseUrl: "https://otakudesu.cam",
|
baseUrl: "https://otakudesu.cloud",
|
||||||
lang: "id",
|
lang: "id",
|
||||||
typeSource: "single",
|
typeSource: "single",
|
||||||
iconUrl:
|
iconUrl:
|
||||||
|
|||||||
Reference in New Issue
Block a user