This commit is contained in:
kodjomoustapha
2024-11-26 18:07:12 +01:00
parent f4a5647852
commit 298e53effe
6 changed files with 52 additions and 76 deletions

View File

@@ -168,6 +168,8 @@ class AnimeOnlineNinja extends MProvider {
}
Future<List<MVideo>> uqloadExtractor(String url, String lang) async {
final Client client =
Client(source, json.encode({"useDartHttpClient": true}));
final res = (await client.get(Uri.parse(url))).body;
final js = xpath(res, '//script[contains(text(), "sources:")]/text()');
if (js.isEmpty) {

View File

@@ -1,7 +1,7 @@
import '../../../../../model/source.dart';
Source get animeonlineninjaSource => _animeonlineninjaSource;
const _animeonlineninjaVersion = "0.0.2";
const _animeonlineninjaVersion = "0.0.3";
const _animeonlineninjaSourceCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/animeonlineninja.dart";
Source _animeonlineninjaSource = Source(

View File

@@ -8,11 +8,13 @@ class OtakuFr extends MProvider {
final Client client = Client(source);
@override
String get baseUrl => getPreferenceValue(source.id, "overrideBaseUrl");
@override
Future<MPages> getPopular(int page) async {
final res =
(await client.get(Uri.parse("${source.baseUrl}/en-cours/page/$page")))
.body;
(await client.get(Uri.parse("$baseUrl/en-cours/page/$page"))).body;
List<MManga> animeList = [];
final urls =
xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href');
@@ -34,8 +36,7 @@ class OtakuFr extends MProvider {
@override
Future<MPages> getLatestUpdates(int page) async {
final res =
(await client.get(Uri.parse("${source.baseUrl}/page/$page/"))).body;
final res = (await client.get(Uri.parse("$baseUrl/page/$page/"))).body;
List<MManga> animeList = [];
final urls = xpath(res, '//*[@class="episode"]/div/a/@href');
@@ -77,19 +78,17 @@ class OtakuFr extends MProvider {
final filters = filterList.filters;
String url = "";
if (query.isNotEmpty) {
url = "${source.baseUrl}/toute-la-liste-affiches/page/$page/?q=$query";
url = "$baseUrl/toute-la-liste-affiches/page/$page/?q=$query";
} else {
for (var filter in filters) {
if (filter.type == "GenreFilter") {
if (filter.state != 0) {
url =
"${source.baseUrl}/${filter.values[filter.state].value}page/$page";
url = "$baseUrl/${filter.values[filter.state].value}page/$page";
}
} else if (filter.type == "SubPageFilter") {
if (url.isEmpty) {
if (filter.state != 0) {
url =
"${source.baseUrl}/${filter.values[filter.state].value}page/$page";
url = "$baseUrl/${filter.values[filter.state].value}page/$page";
}
}
}
@@ -122,7 +121,9 @@ class OtakuFr extends MProvider {
final statusList = [
{"En cours": 0, "Terminé": 1}
];
String res = (await client.get(Uri.parse(url))).body;
String res =
(await client.get(Uri.parse("$baseUrl${getUrlWithoutDomain(url)}")))
.body;
MManga anime = MManga();
final originalUrl = xpath(res,
'//*[@class="breadcrumb"]/li[@class="breadcrumb-item"][2]/a/@href');
@@ -173,7 +174,9 @@ class OtakuFr extends MProvider {
@override
Future<List<MVideo>> getVideoList(String url) async {
final res = (await client.get(Uri.parse(url))).body;
final res =
(await client.get(Uri.parse("$baseUrl${getUrlWithoutDomain(url)}")))
.body;
final servers = parseHtml(res).select("div.tab-content iframe[src]");
List<MVideo> videos = [];
@@ -189,15 +192,12 @@ class OtakuFr extends MProvider {
if (serverUrl.contains("https://streamwish") &&
hosterSelection.contains("Streamwish")) {
a = await streamWishExtractor(serverUrl, "StreamWish");
} else if (serverUrl.contains("sibnet") &&
hosterSelection.contains("Sibnet")) {
a = await sibnetExtractor(serverUrl);
} else if (serverUrl.contains("https://doo") &&
hosterSelection.contains("Doodstream")) {
a = await doodExtractor(serverUrl);
} else if (serverUrl.contains("https://voe.sx") &&
hosterSelection.contains("Voe")) {
// a = await voeExtractor(serverUrl, null);
} else if (containsVidBom(serverUrl) &&
hosterSelection.contains("VidBom")) {
a = await vidBomExtractor(serverUrl);
} else if (serverUrl.contains("https://ok.ru") &&
hosterSelection.contains("Okru")) {
a = await okruExtractor(serverUrl);
@@ -207,6 +207,9 @@ class OtakuFr extends MProvider {
} else if (serverUrl.contains("sendvid") &&
hosterSelection.contains("Sendvid")) {
a = await sendVidExtractorr(serverUrl, "");
} else if (serverUrl.contains("voe.sx") &&
hosterSelection.contains("Voe")) {
a = await voeExtractor(serverUrl, "");
}
videos.addAll(a);
}
@@ -218,6 +221,17 @@ class OtakuFr extends MProvider {
return regExp(url, r"^(?:(?:https?:)?//|www\.)", 'https://', 0, 0);
}
bool containsVidBom(String url) {
url = url;
final list = ["vidbam", "vadbam", "vidbom", "vidbm"];
for (var n in list) {
if (url.contains(n)) {
return true;
}
}
return false;
}
@override
List<dynamic> getFilterList() {
return [
@@ -277,6 +291,14 @@ class OtakuFr extends MProvider {
@override
List<dynamic> getSourcePreferences() {
return [
EditTextPreference(
key: "overrideBaseUrl",
title: "Changer l'url de base",
summary: "",
value: "https://otakufr.cc",
dialogTitle: "Changer l'url de base",
dialogMessage: "",
text: "https://otakufr.cc"),
ListPreference(
key: "preferred_quality",
title: "Qualité préférée",
@@ -285,14 +307,14 @@ class OtakuFr extends MProvider {
entries: ["1080p", "720p", "480p", "360p"],
entryValues: ["1080", "720", "480", "360"]),
MultiSelectListPreference(
key: "hoster_selection",
key: "hoster_selection_",
title: "Enable/Disable Hosts",
summary: "",
entries: [
"Streamwish",
"Doodstream",
"Sendvid",
"Vidbm",
"VidBom",
"Okru",
"Voe",
"Sibnet",
@@ -302,7 +324,7 @@ class OtakuFr extends MProvider {
"Streamwish",
"Doodstream",
"Sendvid",
"Vidbm",
"VidBom",
"Okru",
"Voe",
"Sibnet",
@@ -349,7 +371,7 @@ class OtakuFr extends MProvider {
}
List<String> preferenceHosterSelection(int sourceId) {
return getPreferenceValue(sourceId, "hoster_selection");
return getPreferenceValue(sourceId, "hoster_selection_");
}
Future<List<MVideo>> sendVidExtractorr(String url, String prefix) async {
@@ -436,56 +458,6 @@ class OtakuFr extends MProvider {
}
return videos;
}
Future<List<MVideo>> vidbmExtractor(String url) async {
final res = (await client.get(Uri.parse(url))).body;
final js = xpath(res,
'//script[contains(text(), "m3u8") or contains(text(), "mp4")]/text()');
if (js.isEmpty) {
return [];
}
final masterUrl = substringBefore(substringAfter(js.first, "source"), "\"");
final quality = substringBefore(
substringAfter(
substringBefore(
substringAfter(substringAfter(js.first, "source"), "file"),
"]"),
"label:\""),
"\"");
List<MVideo> videos = [];
if (masterUrl.contains("m3u8")) {
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
.split("#EXT-X-STREAM-INF:")) {
final quality =
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
String videoUrl = substringBefore(substringAfter(it, "\n"), "\n");
if (!videoUrl.startsWith("http")) {
videoUrl =
"${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl";
}
MVideo video = MVideo();
video
..url = videoUrl
..originalUrl = videoUrl
..quality = "Vidbm - $quality";
videos.add(video);
}
return videos;
} else {
MVideo video = MVideo();
video
..url = masterUrl
..originalUrl = masterUrl
..quality = "Vidbm - $quality";
videos.add(video);
}
return videos;
}
}
OtakuFr main(MSource source) {

View File

@@ -1,12 +1,12 @@
import '../../../../../model/source.dart';
Source get otakufr => _otakufr;
const otakufrVersion = "0.0.9";
const otakufrVersion = "0.0.95";
const otakufrCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/otakufr.dart";
Source _otakufr = Source(
name: "OtakuFr",
baseUrl: "https://otakufr.co",
baseUrl: "https://otakufr.cc",
lang: "fr",
typeSource: "single",
iconUrl: