mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
fix
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:convert';
|
||||||
import 'package:mangayomi/bridge_lib.dart';
|
import 'package:mangayomi/bridge_lib.dart';
|
||||||
|
|
||||||
class DataLifeEngine extends MProvider {
|
class DataLifeEngine extends MProvider {
|
||||||
@@ -5,7 +6,8 @@ class DataLifeEngine extends MProvider {
|
|||||||
|
|
||||||
MSource source;
|
MSource source;
|
||||||
|
|
||||||
final Client client = Client(source);
|
final Client client =
|
||||||
|
Client(source, json.encode({"useDartHttpClient": true}));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsLatest => false;
|
bool get supportsLatest => false;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import '../../../../model/source.dart';
|
|||||||
import 'src/frenchanime/frenchanime.dart';
|
import 'src/frenchanime/frenchanime.dart';
|
||||||
import 'src/wiflix/wiflix.dart';
|
import 'src/wiflix/wiflix.dart';
|
||||||
|
|
||||||
const _datalifeengineVersion = "0.0.55";
|
const _datalifeengineVersion = "0.0.6";
|
||||||
const _datalifeengineSourceCodeUrl =
|
const _datalifeengineSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/datalifeengine.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/multisrc/datalifeengine/datalifeengine.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -168,6 +168,8 @@ class AnimeOnlineNinja extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> uqloadExtractor(String url, String lang) async {
|
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 res = (await client.get(Uri.parse(url))).body;
|
||||||
final js = xpath(res, '//script[contains(text(), "sources:")]/text()');
|
final js = xpath(res, '//script[contains(text(), "sources:")]/text()');
|
||||||
if (js.isEmpty) {
|
if (js.isEmpty) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../../model/source.dart';
|
import '../../../../../model/source.dart';
|
||||||
|
|
||||||
Source get animeonlineninjaSource => _animeonlineninjaSource;
|
Source get animeonlineninjaSource => _animeonlineninjaSource;
|
||||||
const _animeonlineninjaVersion = "0.0.2";
|
const _animeonlineninjaVersion = "0.0.3";
|
||||||
const _animeonlineninjaSourceCodeUrl =
|
const _animeonlineninjaSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/animeonlineninja.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/es/animeonlineninja/animeonlineninja.dart";
|
||||||
Source _animeonlineninjaSource = Source(
|
Source _animeonlineninjaSource = Source(
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ class OtakuFr 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 =
|
final res =
|
||||||
(await client.get(Uri.parse("${source.baseUrl}/en-cours/page/$page")))
|
(await client.get(Uri.parse("$baseUrl/en-cours/page/$page"))).body;
|
||||||
.body;
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls =
|
final urls =
|
||||||
xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href');
|
xpath(res, '//*[@class="list"]/article/div/div/figure/a/@href');
|
||||||
@@ -34,8 +36,7 @@ class OtakuFr extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(int page) async {
|
Future<MPages> getLatestUpdates(int page) async {
|
||||||
final res =
|
final res = (await client.get(Uri.parse("$baseUrl/page/$page/"))).body;
|
||||||
(await client.get(Uri.parse("${source.baseUrl}/page/$page/"))).body;
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//*[@class="episode"]/div/a/@href');
|
final urls = xpath(res, '//*[@class="episode"]/div/a/@href');
|
||||||
@@ -77,19 +78,17 @@ class OtakuFr extends MProvider {
|
|||||||
final filters = filterList.filters;
|
final filters = filterList.filters;
|
||||||
String url = "";
|
String url = "";
|
||||||
if (query.isNotEmpty) {
|
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 {
|
} else {
|
||||||
for (var filter in filters) {
|
for (var filter in filters) {
|
||||||
if (filter.type == "GenreFilter") {
|
if (filter.type == "GenreFilter") {
|
||||||
if (filter.state != 0) {
|
if (filter.state != 0) {
|
||||||
url =
|
url = "$baseUrl/${filter.values[filter.state].value}page/$page";
|
||||||
"${source.baseUrl}/${filter.values[filter.state].value}page/$page";
|
|
||||||
}
|
}
|
||||||
} else if (filter.type == "SubPageFilter") {
|
} else if (filter.type == "SubPageFilter") {
|
||||||
if (url.isEmpty) {
|
if (url.isEmpty) {
|
||||||
if (filter.state != 0) {
|
if (filter.state != 0) {
|
||||||
url =
|
url = "$baseUrl/${filter.values[filter.state].value}page/$page";
|
||||||
"${source.baseUrl}/${filter.values[filter.state].value}page/$page";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,7 +121,9 @@ class OtakuFr extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"En cours": 0, "Terminé": 1}
|
{"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();
|
MManga anime = MManga();
|
||||||
final originalUrl = xpath(res,
|
final originalUrl = xpath(res,
|
||||||
'//*[@class="breadcrumb"]/li[@class="breadcrumb-item"][2]/a/@href');
|
'//*[@class="breadcrumb"]/li[@class="breadcrumb-item"][2]/a/@href');
|
||||||
@@ -173,7 +174,9 @@ class OtakuFr extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(String url) async {
|
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]");
|
final servers = parseHtml(res).select("div.tab-content iframe[src]");
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
@@ -189,15 +192,12 @@ class OtakuFr extends MProvider {
|
|||||||
if (serverUrl.contains("https://streamwish") &&
|
if (serverUrl.contains("https://streamwish") &&
|
||||||
hosterSelection.contains("Streamwish")) {
|
hosterSelection.contains("Streamwish")) {
|
||||||
a = await streamWishExtractor(serverUrl, "StreamWish");
|
a = await streamWishExtractor(serverUrl, "StreamWish");
|
||||||
} else if (serverUrl.contains("sibnet") &&
|
|
||||||
hosterSelection.contains("Sibnet")) {
|
|
||||||
a = await sibnetExtractor(serverUrl);
|
|
||||||
} else if (serverUrl.contains("https://doo") &&
|
} else if (serverUrl.contains("https://doo") &&
|
||||||
hosterSelection.contains("Doodstream")) {
|
hosterSelection.contains("Doodstream")) {
|
||||||
a = await doodExtractor(serverUrl);
|
a = await doodExtractor(serverUrl);
|
||||||
} else if (serverUrl.contains("https://voe.sx") &&
|
} else if (containsVidBom(serverUrl) &&
|
||||||
hosterSelection.contains("Voe")) {
|
hosterSelection.contains("VidBom")) {
|
||||||
// a = await voeExtractor(serverUrl, null);
|
a = await vidBomExtractor(serverUrl);
|
||||||
} else if (serverUrl.contains("https://ok.ru") &&
|
} else if (serverUrl.contains("https://ok.ru") &&
|
||||||
hosterSelection.contains("Okru")) {
|
hosterSelection.contains("Okru")) {
|
||||||
a = await okruExtractor(serverUrl);
|
a = await okruExtractor(serverUrl);
|
||||||
@@ -207,6 +207,9 @@ class OtakuFr extends MProvider {
|
|||||||
} else if (serverUrl.contains("sendvid") &&
|
} else if (serverUrl.contains("sendvid") &&
|
||||||
hosterSelection.contains("Sendvid")) {
|
hosterSelection.contains("Sendvid")) {
|
||||||
a = await sendVidExtractorr(serverUrl, "");
|
a = await sendVidExtractorr(serverUrl, "");
|
||||||
|
} else if (serverUrl.contains("voe.sx") &&
|
||||||
|
hosterSelection.contains("Voe")) {
|
||||||
|
a = await voeExtractor(serverUrl, "");
|
||||||
}
|
}
|
||||||
videos.addAll(a);
|
videos.addAll(a);
|
||||||
}
|
}
|
||||||
@@ -218,6 +221,17 @@ class OtakuFr extends MProvider {
|
|||||||
return regExp(url, r"^(?:(?:https?:)?//|www\.)", 'https://', 0, 0);
|
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
|
@override
|
||||||
List<dynamic> getFilterList() {
|
List<dynamic> getFilterList() {
|
||||||
return [
|
return [
|
||||||
@@ -277,6 +291,14 @@ class OtakuFr extends MProvider {
|
|||||||
@override
|
@override
|
||||||
List<dynamic> getSourcePreferences() {
|
List<dynamic> getSourcePreferences() {
|
||||||
return [
|
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(
|
ListPreference(
|
||||||
key: "preferred_quality",
|
key: "preferred_quality",
|
||||||
title: "Qualité préférée",
|
title: "Qualité préférée",
|
||||||
@@ -285,14 +307,14 @@ class OtakuFr extends MProvider {
|
|||||||
entries: ["1080p", "720p", "480p", "360p"],
|
entries: ["1080p", "720p", "480p", "360p"],
|
||||||
entryValues: ["1080", "720", "480", "360"]),
|
entryValues: ["1080", "720", "480", "360"]),
|
||||||
MultiSelectListPreference(
|
MultiSelectListPreference(
|
||||||
key: "hoster_selection",
|
key: "hoster_selection_",
|
||||||
title: "Enable/Disable Hosts",
|
title: "Enable/Disable Hosts",
|
||||||
summary: "",
|
summary: "",
|
||||||
entries: [
|
entries: [
|
||||||
"Streamwish",
|
"Streamwish",
|
||||||
"Doodstream",
|
"Doodstream",
|
||||||
"Sendvid",
|
"Sendvid",
|
||||||
"Vidbm",
|
"VidBom",
|
||||||
"Okru",
|
"Okru",
|
||||||
"Voe",
|
"Voe",
|
||||||
"Sibnet",
|
"Sibnet",
|
||||||
@@ -302,7 +324,7 @@ class OtakuFr extends MProvider {
|
|||||||
"Streamwish",
|
"Streamwish",
|
||||||
"Doodstream",
|
"Doodstream",
|
||||||
"Sendvid",
|
"Sendvid",
|
||||||
"Vidbm",
|
"VidBom",
|
||||||
"Okru",
|
"Okru",
|
||||||
"Voe",
|
"Voe",
|
||||||
"Sibnet",
|
"Sibnet",
|
||||||
@@ -349,7 +371,7 @@ class OtakuFr extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<String> preferenceHosterSelection(int sourceId) {
|
List<String> preferenceHosterSelection(int sourceId) {
|
||||||
return getPreferenceValue(sourceId, "hoster_selection");
|
return getPreferenceValue(sourceId, "hoster_selection_");
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> sendVidExtractorr(String url, String prefix) async {
|
Future<List<MVideo>> sendVidExtractorr(String url, String prefix) async {
|
||||||
@@ -436,56 +458,6 @@ class OtakuFr extends MProvider {
|
|||||||
}
|
}
|
||||||
return videos;
|
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) {
|
OtakuFr main(MSource source) {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import '../../../../../model/source.dart';
|
import '../../../../../model/source.dart';
|
||||||
|
|
||||||
Source get otakufr => _otakufr;
|
Source get otakufr => _otakufr;
|
||||||
const otakufrVersion = "0.0.9";
|
const otakufrVersion = "0.0.95";
|
||||||
const otakufrCodeUrl =
|
const otakufrCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/otakufr.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/fr/otakufr/otakufr.dart";
|
||||||
Source _otakufr = Source(
|
Source _otakufr = Source(
|
||||||
name: "OtakuFr",
|
name: "OtakuFr",
|
||||||
baseUrl: "https://otakufr.co",
|
baseUrl: "https://otakufr.cc",
|
||||||
lang: "fr",
|
lang: "fr",
|
||||||
typeSource: "single",
|
typeSource: "single",
|
||||||
iconUrl:
|
iconUrl:
|
||||||
|
|||||||
Reference in New Issue
Block a user