From 298e53effe288ec08a140e4579a6d518accea5d8 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Tue, 26 Nov 2024 18:07:12 +0100 Subject: [PATCH] fix --- .../datalifeengine/datalifeengine.dart | 4 +- .../multisrc/datalifeengine/sources.dart | 2 +- .../es/animeonlineninja/animeonlineninja.dart | 2 + .../anime/src/es/animeonlineninja/source.dart | 2 +- dart/anime/src/fr/otakufr/otakufr.dart | 114 +++++++----------- dart/anime/src/fr/otakufr/source.dart | 4 +- 6 files changed, 52 insertions(+), 76 deletions(-) diff --git a/dart/anime/multisrc/datalifeengine/datalifeengine.dart b/dart/anime/multisrc/datalifeengine/datalifeengine.dart index e55e14bd..3186b4d3 100644 --- a/dart/anime/multisrc/datalifeengine/datalifeengine.dart +++ b/dart/anime/multisrc/datalifeengine/datalifeengine.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'package:mangayomi/bridge_lib.dart'; class DataLifeEngine extends MProvider { @@ -5,7 +6,8 @@ class DataLifeEngine extends MProvider { MSource source; - final Client client = Client(source); + final Client client = + Client(source, json.encode({"useDartHttpClient": true})); @override bool get supportsLatest => false; diff --git a/dart/anime/multisrc/datalifeengine/sources.dart b/dart/anime/multisrc/datalifeengine/sources.dart index 23c00299..1398b736 100644 --- a/dart/anime/multisrc/datalifeengine/sources.dart +++ b/dart/anime/multisrc/datalifeengine/sources.dart @@ -2,7 +2,7 @@ import '../../../../model/source.dart'; import 'src/frenchanime/frenchanime.dart'; import 'src/wiflix/wiflix.dart'; -const _datalifeengineVersion = "0.0.55"; +const _datalifeengineVersion = "0.0.6"; const _datalifeengineSourceCodeUrl = "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/datalifeengine.dart"; diff --git a/dart/anime/src/es/animeonlineninja/animeonlineninja.dart b/dart/anime/src/es/animeonlineninja/animeonlineninja.dart index 24f8f713..b18127be 100644 --- a/dart/anime/src/es/animeonlineninja/animeonlineninja.dart +++ b/dart/anime/src/es/animeonlineninja/animeonlineninja.dart @@ -168,6 +168,8 @@ class AnimeOnlineNinja extends MProvider { } Future> 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) { diff --git a/dart/anime/src/es/animeonlineninja/source.dart b/dart/anime/src/es/animeonlineninja/source.dart index edc46c89..c6b5eac8 100644 --- a/dart/anime/src/es/animeonlineninja/source.dart +++ b/dart/anime/src/es/animeonlineninja/source.dart @@ -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( diff --git a/dart/anime/src/fr/otakufr/otakufr.dart b/dart/anime/src/fr/otakufr/otakufr.dart index 169ee828..b46fd681 100644 --- a/dart/anime/src/fr/otakufr/otakufr.dart +++ b/dart/anime/src/fr/otakufr/otakufr.dart @@ -8,11 +8,13 @@ class OtakuFr extends MProvider { final Client client = Client(source); + @override + String get baseUrl => getPreferenceValue(source.id, "overrideBaseUrl"); + @override Future 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 animeList = []; final urls = xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href'); @@ -34,8 +36,7 @@ class OtakuFr extends MProvider { @override Future 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 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> 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 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 getFilterList() { return [ @@ -277,6 +291,14 @@ class OtakuFr extends MProvider { @override List 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 preferenceHosterSelection(int sourceId) { - return getPreferenceValue(sourceId, "hoster_selection"); + return getPreferenceValue(sourceId, "hoster_selection_"); } Future> sendVidExtractorr(String url, String prefix) async { @@ -436,56 +458,6 @@ class OtakuFr extends MProvider { } return videos; } - - Future> 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 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) { diff --git a/dart/anime/src/fr/otakufr/source.dart b/dart/anime/src/fr/otakufr/source.dart index ee005123..1c12b2b5 100644 --- a/dart/anime/src/fr/otakufr/source.dart +++ b/dart/anime/src/fr/otakufr/source.dart @@ -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: