mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 02:41:39 +00:00
Refactor
This commit is contained in:
@@ -4,13 +4,16 @@ import 'dart:convert';
|
|||||||
class DataLifeEngine extends MProvider {
|
class DataLifeEngine extends MProvider {
|
||||||
DataLifeEngine();
|
DataLifeEngine();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsLatest => false;
|
bool get supportsLatest => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}${getPath(source)}page/$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}${getPath(source)}page/$page")))
|
||||||
|
.body;
|
||||||
return animeFromElement(res, source.baseUrl);
|
return animeFromElement(res, source.baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,20 +37,17 @@ class DataLifeEngine extends MProvider {
|
|||||||
};
|
};
|
||||||
final cleanQuery = query.replaceAll(" ", "+");
|
final cleanQuery = query.replaceAll(" ", "+");
|
||||||
if (page == 1) {
|
if (page == 1) {
|
||||||
res = await http(
|
res = (await client.post(
|
||||||
'POST',
|
Uri.parse(
|
||||||
json.encode({
|
"$baseUrl?do=search&subaction=search&story=$cleanQuery"),
|
||||||
"url": "$baseUrl?do=search&subaction=search&story=$cleanQuery",
|
headers: headers))
|
||||||
"headers": headers
|
.body;
|
||||||
}));
|
|
||||||
} else {
|
} else {
|
||||||
res = await http(
|
res = (await client.post(
|
||||||
'POST',
|
Uri.parse(
|
||||||
json.encode({
|
"$baseUrl?do=search&subaction=search&search_start=$page&full_search=0&result_from=11&story=$cleanQuery"),
|
||||||
"url":
|
headers: headers))
|
||||||
"$baseUrl?do=search&subaction=search&search_start=$page&full_search=0&result_from=11&story=$cleanQuery",
|
.body;
|
||||||
"headers": headers
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
String url = "";
|
String url = "";
|
||||||
@@ -62,7 +62,7 @@ class DataLifeEngine extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res = await http('GET', json.encode({"url": url}));
|
res = (await client.get(Uri.parse(url))).body;
|
||||||
}
|
}
|
||||||
|
|
||||||
return animeFromElement(res, baseUrl);
|
return animeFromElement(res, baseUrl);
|
||||||
@@ -70,8 +70,7 @@ class DataLifeEngine extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final data = {"url": url};
|
String res = (await client.get(Uri.parse(url))).body;
|
||||||
String res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final description = xpath(res, '//span[@itemprop="description"]/text()');
|
final description = xpath(res, '//span[@itemprop="description"]/text()');
|
||||||
anime.description = description.isNotEmpty ? description.first : "";
|
anime.description = description.isNotEmpty ? description.first : "";
|
||||||
@@ -165,14 +164,14 @@ class DataLifeEngine extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> streamHideExtractor(String url) async {
|
Future<List<MVideo>> streamHideExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final masterUrl = substringBefore(
|
final masterUrl = substringBefore(
|
||||||
substringAfter(
|
substringAfter(
|
||||||
substringAfter(substringAfter(unpackJs(res), "sources:"), "file:\""),
|
substringAfter(
|
||||||
|
substringAfter(unpackJs(res), "sources:"), "file:\""),
|
||||||
"src:\""),
|
"src:\""),
|
||||||
'"');
|
'"');
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
@@ -197,15 +196,14 @@ class DataLifeEngine extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> upstreamExtractor(String url) async {
|
Future<List<MVideo>> upstreamExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final js = xpath(res, '//script[contains(text(), "m3u8")]/text()');
|
final js = xpath(res, '//script[contains(text(), "m3u8")]/text()');
|
||||||
if (js.isEmpty) {
|
if (js.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
final masterUrl =
|
final masterUrl =
|
||||||
substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}");
|
substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}");
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
@@ -230,7 +228,7 @@ class DataLifeEngine extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> uqloadExtractor(String url) async {
|
Future<List<MVideo>> uqloadExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
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) {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -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.2";
|
const _datalifeengineVersion = "0.0.25";
|
||||||
const _datalifeengineSourceCodeUrl =
|
const _datalifeengineSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/datalifeengine/datalifeengine.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/datalifeengine/datalifeengine.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,20 +4,21 @@ import 'dart:convert';
|
|||||||
class DopeFlix extends MProvider {
|
class DopeFlix extends MProvider {
|
||||||
DopeFlix();
|
DopeFlix();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${preferenceBaseUrl(source.id)}/${getPreferenceValue(source.id, "preferred_popular_page")}?page=$page")))
|
||||||
"${preferenceBaseUrl(source.id)}/${getPreferenceValue(source.id, "preferred_popular_page")}?page=$page"
|
.body;
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}/home"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}/home")))
|
||||||
|
.body;
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final path =
|
final path =
|
||||||
'//section[contains(text(),"${getPreferenceValue(source.id, "preferred_latest_page")}")]/div/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]';
|
'//section[contains(text(),"${getPreferenceValue(source.id, "preferred_latest_page")}")]/div/div[@class="film_list-wrap"]/div[@class="flw-item"]/div[@class="film-poster"]';
|
||||||
@@ -74,16 +75,17 @@ class DopeFlix extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final description = xpath(res, '//div[@class="description"]/text()');
|
final description = xpath(res, '//div[@class="description"]/text()');
|
||||||
if (description.isNotEmpty) {
|
if (description.isNotEmpty) {
|
||||||
@@ -104,10 +106,9 @@ class DopeFlix extends MProvider {
|
|||||||
episode.url = "${preferenceBaseUrl(source.id)}/ajax/movie/episodes/$id";
|
episode.url = "${preferenceBaseUrl(source.id)}/ajax/movie/episodes/$id";
|
||||||
episodesList.add(episode);
|
episodesList.add(episode);
|
||||||
} else {
|
} else {
|
||||||
final dataS = {
|
final resS = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/ajax/v2/tv/seasons/$id"
|
"${preferenceBaseUrl(source.id)}/ajax/v2/tv/seasons/$id")))
|
||||||
};
|
.body;
|
||||||
final resS = await http('GET', json.encode(dataS));
|
|
||||||
|
|
||||||
final seasonIds =
|
final seasonIds =
|
||||||
xpath(resS, '//a[@class="dropdown-item ss-item"]/@data-id');
|
xpath(resS, '//a[@class="dropdown-item ss-item"]/@data-id');
|
||||||
@@ -116,11 +117,10 @@ class DopeFlix extends MProvider {
|
|||||||
for (int i = 0; i < seasonIds.length; i++) {
|
for (int i = 0; i < seasonIds.length; i++) {
|
||||||
final seasonId = seasonIds[i];
|
final seasonId = seasonIds[i];
|
||||||
final seasonName = seasonNames[i];
|
final seasonName = seasonNames[i];
|
||||||
final dataE = {
|
|
||||||
"url":
|
final html = (await client.get(Uri.parse(
|
||||||
"${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId"
|
"${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId")))
|
||||||
};
|
.body;
|
||||||
final html = await http('GET', json.encode(dataE));
|
|
||||||
|
|
||||||
final epsHtmls = parseHtml(html).select("div.eps-item");
|
final epsHtmls = parseHtml(html).select("div.eps-item");
|
||||||
|
|
||||||
@@ -147,8 +147,10 @@ class DopeFlix extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
final res = await http(
|
final res =
|
||||||
'GET', json.encode({"url": "${preferenceBaseUrl(source.id)}/$url"}));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}/$url")))
|
||||||
|
.body;
|
||||||
|
|
||||||
final vidsHtmls = parseHtml(res).select("ul.fss-list a.btn-play");
|
final vidsHtmls = parseHtml(res).select("ul.fss-list a.btn-play");
|
||||||
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
@@ -156,10 +158,10 @@ class DopeFlix extends MProvider {
|
|||||||
final vidHtml = vidH.outerHtml;
|
final vidHtml = vidH.outerHtml;
|
||||||
final id = xpath(vidHtml, '//a/@data-id').first;
|
final id = xpath(vidHtml, '//a/@data-id').first;
|
||||||
final name = xpath(vidHtml, '//span/text()').first;
|
final name = xpath(vidHtml, '//span/text()').first;
|
||||||
final resSource = await http(
|
final resSource = (await client.get(
|
||||||
'GET',
|
Uri.parse("${preferenceBaseUrl(source.id)}/ajax/sources/$id")))
|
||||||
json.encode(
|
.body;
|
||||||
{"url": "${preferenceBaseUrl(source.id)}/ajax/sources/$id"}));
|
|
||||||
final vidUrl =
|
final vidUrl =
|
||||||
substringBefore(substringAfter(resSource, "\"link\":\""), "\"");
|
substringBefore(substringAfter(resSource, "\"link\":\""), "\"");
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
@@ -168,12 +170,11 @@ class DopeFlix extends MProvider {
|
|||||||
} else if (["Vidcloud", "UpCloud"].contains(name)) {
|
} else if (["Vidcloud", "UpCloud"].contains(name)) {
|
||||||
final id = substringBefore(substringAfter(vidUrl, "/embed-4/"), "?");
|
final id = substringBefore(substringAfter(vidUrl, "/embed-4/"), "?");
|
||||||
final serverUrl = substringBefore(vidUrl, "/embed");
|
final serverUrl = substringBefore(vidUrl, "/embed");
|
||||||
final datasServer = {
|
|
||||||
"url": "$serverUrl/ajax/embed-4/getSources?id=$id",
|
|
||||||
"headers": {"X-Requested-With": "XMLHttpRequest"}
|
|
||||||
};
|
|
||||||
|
|
||||||
final resServer = await http('GET', json.encode(datasServer));
|
final resServer = (await client.get(
|
||||||
|
Uri.parse("$serverUrl/ajax/embed-4/getSources?id=$id"),
|
||||||
|
headers: {"X-Requested-With": "XMLHttpRequest"}))
|
||||||
|
.body;
|
||||||
final encrypted = getMapValue(resServer, "encrypted");
|
final encrypted = getMapValue(resServer, "encrypted");
|
||||||
String videoResJson = "";
|
String videoResJson = "";
|
||||||
if (encrypted == "true") {
|
if (encrypted == "true") {
|
||||||
@@ -220,7 +221,8 @@ class DopeFlix extends MProvider {
|
|||||||
subtitles = sortSubs(subtitles, source.id);
|
subtitles = sortSubs(subtitles, source.id);
|
||||||
if (type == "hls") {
|
if (type == "hls") {
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes =
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
(await client.get(Uri.parse(masterUrl))).body;
|
||||||
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
@@ -258,11 +260,10 @@ class DopeFlix extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<List<int>>> generateIndexPairs() async {
|
Future<List<List<int>>> generateIndexPairs() async {
|
||||||
final res = await http(
|
final res = (await client.get(Uri.parse(
|
||||||
'GET',
|
"https://rabbitstream.net/js/player/prod/e4-player.min.js")))
|
||||||
json.encode({
|
.body;
|
||||||
"url": "https://rabbitstream.net/js/player/prod/e4-player.min.js"
|
|
||||||
}));
|
|
||||||
String script = substringBefore(substringAfter(res, "const "), "()");
|
String script = substringBefore(substringAfter(res, "const "), "()");
|
||||||
script = script.substring(0, script.lastIndexOf(','));
|
script = script.substring(0, script.lastIndexOf(','));
|
||||||
final list = script
|
final list = script
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import '../../../model/source.dart';
|
|||||||
import 'src/dopebox/dopebox.dart';
|
import 'src/dopebox/dopebox.dart';
|
||||||
import 'src/sflix/sflix.dart';
|
import 'src/sflix/sflix.dart';
|
||||||
|
|
||||||
const _dopeflixVersion = "0.0.3";
|
const _dopeflixVersion = "0.0.35";
|
||||||
const _dopeflixSourceCodeUrl =
|
const _dopeflixSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/dopeflix/dopeflix.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/dopeflix/dopeflix.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import '../../../model/source.dart';
|
|||||||
import 'src/aniwatch/aniwatch.dart';
|
import 'src/aniwatch/aniwatch.dart';
|
||||||
import 'src/kaido/kaido.dart';
|
import 'src/kaido/kaido.dart';
|
||||||
|
|
||||||
const _zorothemeVersion = "0.0.7";
|
const _zorothemeVersion = "0.0.75";
|
||||||
const _zorothemeSourceCodeUrl =
|
const _zorothemeSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/zorotheme/zorotheme.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/multisrc/zorotheme/zorotheme.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,18 +4,22 @@ import 'dart:convert';
|
|||||||
class ZoroTheme extends MProvider {
|
class ZoroTheme extends MProvider {
|
||||||
ZoroTheme();
|
ZoroTheme();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/most-popular?page=$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/most-popular?page=$page")))
|
||||||
|
.body;
|
||||||
|
|
||||||
return animeElementM(res);
|
return animeElementM(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/recently-updated?page=$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/recently-updated?page=$page")))
|
||||||
|
.body;
|
||||||
|
|
||||||
return animeElementM(res);
|
return animeElementM(res);
|
||||||
}
|
}
|
||||||
@@ -109,8 +113,7 @@ class ZoroTheme extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
url += "${ll(url)}page=$page";
|
url += "${ll(url)}page=$page";
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return animeElementM(res);
|
return animeElementM(res);
|
||||||
}
|
}
|
||||||
@@ -118,13 +121,9 @@ class ZoroTheme extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final statusList = [
|
final statusList = [
|
||||||
{
|
{"Currently Airing": 0, "Finished Airing": 1}
|
||||||
"Currently Airing": 0,
|
|
||||||
"Finished Airing": 1,
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
final data = {"url": "${source.baseUrl}$url"};
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(res,
|
final status = xpath(res,
|
||||||
'//*[@class="anisc-info"]/div[contains(text(),"Status:")]/span[2]/text()')
|
'//*[@class="anisc-info"]/div[contains(text(),"Status:")]/span[2]/text()')
|
||||||
@@ -148,11 +147,8 @@ class ZoroTheme extends MProvider {
|
|||||||
final urlEp =
|
final urlEp =
|
||||||
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/list/$id";
|
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/list/$id";
|
||||||
|
|
||||||
final dataEp = {
|
final resEp =
|
||||||
"url": urlEp,
|
(await client.get(Uri.parse(urlEp), headers: {"referer": url})).body;
|
||||||
"headers": {"referer": url}
|
|
||||||
};
|
|
||||||
final resEp = await http('GET', json.encode(dataEp));
|
|
||||||
|
|
||||||
final html = json.decode(resEp)["html"];
|
final html = json.decode(resEp)["html"];
|
||||||
final epElements = parseHtml(html).select("a.ep-item");
|
final epElements = parseHtml(html).select("a.ep-item");
|
||||||
@@ -177,12 +173,11 @@ class ZoroTheme extends MProvider {
|
|||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final id = substringAfterLast(url, '?ep=');
|
final id = substringAfterLast(url, '?ep=');
|
||||||
|
|
||||||
final datas = {
|
final res = (await client.get(
|
||||||
"url":
|
Uri.parse(
|
||||||
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/servers?episodeId=$id",
|
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/servers?episodeId=$id"),
|
||||||
"headers": {"referer": "${source.baseUrl}/$url"}
|
headers: {"referer": "${source.baseUrl}/$url"}))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
final html = json.decode(res)["html"];
|
final html = json.decode(res)["html"];
|
||||||
|
|
||||||
final serverElements = parseHtml(html).select("div.server-item");
|
final serverElements = parseHtml(html).select("div.server-item");
|
||||||
@@ -194,13 +189,12 @@ class ZoroTheme extends MProvider {
|
|||||||
final name = serverElement.text;
|
final name = serverElement.text;
|
||||||
final id = serverElement.attr("data-id");
|
final id = serverElement.attr("data-id");
|
||||||
final subDub = serverElement.attr("data-type");
|
final subDub = serverElement.attr("data-type");
|
||||||
final datasE = {
|
|
||||||
"url":
|
|
||||||
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id",
|
|
||||||
"headers": {"referer": "${source.baseUrl}/$url"}
|
|
||||||
};
|
|
||||||
|
|
||||||
final resE = await http('GET', json.encode(datasE));
|
final resE = (await client.get(
|
||||||
|
Uri.parse(
|
||||||
|
"${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id"),
|
||||||
|
headers: {"referer": "${source.baseUrl}/$url"}))
|
||||||
|
.body;
|
||||||
String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\"");
|
String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\"");
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
|
|
||||||
|
|||||||
@@ -4,24 +4,23 @@ import 'dart:convert';
|
|||||||
class AnimeWorldIndia extends MProvider {
|
class AnimeWorldIndia extends MProvider {
|
||||||
AnimeWorldIndia();
|
AnimeWorldIndia();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=viewed")))
|
||||||
"${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=viewed"
|
.body;
|
||||||
};
|
|
||||||
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res, source.baseUrl);
|
return parseAnimeList(res, source.baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=update")))
|
||||||
"${source.baseUrl}/advanced-search/page/$page/?s_lang=${source.lang}&s_orderby=update"
|
.body;
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res, source.baseUrl);
|
return parseAnimeList(res, source.baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,15 +62,14 @@ class AnimeWorldIndia extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
return parseAnimeList(res, source.baseUrl);
|
return parseAnimeList(res, source.baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
final isMovie =
|
final isMovie =
|
||||||
@@ -146,15 +144,13 @@ class AnimeWorldIndia extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res =
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body;
|
||||||
await http('GET', json.encode({"url": "${source.baseUrl}$url"}));
|
|
||||||
|
|
||||||
var resJson = substringBefore(
|
var resJson = substringBefore(
|
||||||
substringAfterLast(res, "\"players\":"), ",\"noplayer\":");
|
substringAfterLast(res, "\"players\":"), ",\"noplayer\":");
|
||||||
var streams = (json.decode(resJson) as List<Map<String, dynamic>>)
|
var streams = (json.decode(resJson) as List<Map<String, dynamic>>)
|
||||||
.where((e) => e["type"] == "stream"
|
.where((e) =>
|
||||||
? true
|
(e["type"] == "stream" ? true : false) &&
|
||||||
: false && (e["url"] as String).isNotEmpty)
|
(e["url"] as String).isNotEmpty)
|
||||||
.toList()
|
.toList()
|
||||||
.where((e) => language(source.lang).isEmpty ||
|
.where((e) => language(source.lang).isEmpty ||
|
||||||
language(source.lang) == e["language"]
|
language(source.lang) == e["language"]
|
||||||
@@ -220,15 +216,14 @@ class AnimeWorldIndia extends MProvider {
|
|||||||
|
|
||||||
Future<List<MVideo>> mystreamExtractor(String url, String language) async {
|
Future<List<MVideo>> mystreamExtractor(String url, String language) async {
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
|
||||||
final streamCode = substringBefore(
|
final streamCode = substringBefore(
|
||||||
substringAfter(substringAfter(res, "sniff("), ", \""), '"');
|
substringAfter(substringAfter(res, "sniff("), ", \""), '"');
|
||||||
|
|
||||||
final streamUrl =
|
final streamUrl =
|
||||||
"${substringBefore(url, "/watch")}/m3u8/$streamCode/master.txt?s=1&cache=1";
|
"${substringBefore(url, "/watch")}/m3u8/$streamCode/master.txt?s=1&cache=1";
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(streamUrl))).body;
|
||||||
await http('GET', json.encode({"url": streamUrl}));
|
|
||||||
List<MTrack> audios = [];
|
List<MTrack> audios = [];
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-MEDIA:TYPE=AUDIO")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-MEDIA:TYPE=AUDIO")
|
||||||
.split("#EXT-X-MEDIA:TYPE=AUDIO")) {
|
.split("#EXT-X-MEDIA:TYPE=AUDIO")) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
const _animeworldindiaVersion = "0.0.1";
|
const _animeworldindiaVersion = "0.0.15";
|
||||||
const _animeworldindiaSourceCodeUrl =
|
const _animeworldindiaSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/all/animeworldindia/animeworldindia.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/all/animeworldindia/animeworldindia.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import 'dart:convert';
|
|||||||
class OkAnime extends MProvider {
|
class OkAnime extends MProvider {
|
||||||
OkAnime();
|
OkAnime();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": source.baseUrl};
|
final res = (await client.get(Uri.parse(source.baseUrl))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
String path =
|
String path =
|
||||||
'//div[@class="section" and contains(text(),"افضل انميات")]/div[@class="section-content"]/div/div/div[contains(@class,"anime-card")]';
|
'//div[@class="section" and contains(text(),"افضل انميات")]/div[@class="section-content"]/div/div/div[contains(@class,"anime-card")]';
|
||||||
@@ -28,9 +28,9 @@ class OkAnime extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/espisode-list?page=$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/espisode-list?page=$page")))
|
||||||
|
.body;
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
String path = '//*[contains(@class,"anime-card")]';
|
String path = '//*[contains(@class,"anime-card")]';
|
||||||
final urls = xpath(res, '$path/div[@class="anime-title")]/h4/a/@href');
|
final urls = xpath(res, '$path/div[@class="anime-title")]/h4/a/@href');
|
||||||
@@ -56,8 +56,8 @@ class OkAnime extends MProvider {
|
|||||||
if (page > 1) {
|
if (page > 1) {
|
||||||
url += "&page=$page";
|
url += "&page=$page";
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
String path = '//*[contains(@class,"anime-card")]';
|
String path = '//*[contains(@class,"anime-card")]';
|
||||||
@@ -82,8 +82,7 @@ class OkAnime extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"يعرض الان": 0, "مكتمل": 1}
|
{"يعرض الان": 0, "مكتمل": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(res,
|
final status = xpath(res,
|
||||||
'//*[@class="full-list-info" and contains(text(),"حالة الأنمي")]/small/a/text()');
|
'//*[@class="full-list-info" and contains(text(),"حالة الأنمي")]/small/a/text()');
|
||||||
@@ -116,8 +115,7 @@ class OkAnime extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
final urls = xpath(res, '//*[@id="streamlinks"]/a/@data-src');
|
final urls = xpath(res, '//*[@id="streamlinks"]/a/@data-src');
|
||||||
final qualities = xpath(res, '//*[@id="streamlinks"]/a/span/text()');
|
final qualities = xpath(res, '//*[@id="streamlinks"]/a/span/text()');
|
||||||
final hosterSelection = preferenceHosterSelection(source.id);
|
final hosterSelection = preferenceHosterSelection(source.id);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get okanimeSource => _okanimeSource;
|
Source get okanimeSource => _okanimeSource;
|
||||||
const _okanimeVersion = "0.0.4";
|
const _okanimeVersion = "0.0.45";
|
||||||
const _okanimeSourceCodeUrl =
|
const _okanimeSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/ar/okanime/okanime.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/ar/okanime/okanime.dart";
|
||||||
Source _okanimeSource = Source(
|
Source _okanimeSource = Source(
|
||||||
|
|||||||
@@ -4,14 +4,15 @@ import 'dart:convert';
|
|||||||
class AniFlix extends MProvider {
|
class AniFlix extends MProvider {
|
||||||
AniFlix();
|
AniFlix();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.baseUrl}/api/show/new/${page - 1}",
|
Uri.parse("${source.baseUrl}/api/show/new/${page - 1}"),
|
||||||
"headers": headers
|
headers: headers))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return parseAnimeList(res, source.baseUrl, true);
|
return parseAnimeList(res, source.baseUrl, true);
|
||||||
}
|
}
|
||||||
@@ -19,11 +20,10 @@ class AniFlix extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.baseUrl}/api/show/airing/${page - 1}",
|
Uri.parse("${source.baseUrl}/api/show/airing/${page - 1}"),
|
||||||
"headers": headers
|
headers: headers))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final datas = json.decode(res);
|
final datas = json.decode(res);
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
List<String> ids = [];
|
List<String> ids = [];
|
||||||
@@ -52,24 +52,16 @@ class AniFlix extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {
|
final res = await client.post(
|
||||||
"url": "${source.baseUrl}/api/show/search",
|
Uri.parse("${source.baseUrl}/api/show/search"),
|
||||||
"body": {"search": query},
|
headers: {'Referer': source.baseUrl},
|
||||||
"headers": {
|
body: {"search": query});
|
||||||
'Referer': source.baseUrl,
|
return parseAnimeList(res.body, source.baseUrl, false);
|
||||||
'Accept': 'application/json',
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
final res = await http('POST', json.encode(data));
|
|
||||||
return parseAnimeList(res, source.baseUrl, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final data = {"url": "${source.baseUrl}$url"};
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body;
|
||||||
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
anime.name = jsonRes["name"];
|
anime.name = jsonRes["name"];
|
||||||
@@ -86,22 +78,18 @@ class AniFlix extends MProvider {
|
|||||||
for (var season in seasons) {
|
for (var season in seasons) {
|
||||||
List<Map<String, dynamic>> episodes = season["episodes"];
|
List<Map<String, dynamic>> episodes = season["episodes"];
|
||||||
int page = 1;
|
int page = 1;
|
||||||
final res = await http(
|
final res = (await client.get(Uri.parse(
|
||||||
'GET',
|
"${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page")))
|
||||||
json.encode({
|
.body;
|
||||||
"url": "${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page"
|
|
||||||
}));
|
|
||||||
bool hasMoreResult =
|
bool hasMoreResult =
|
||||||
(json.decode(res)["episodes"] as List<Map<String, dynamic>>)
|
(json.decode(res)["episodes"] as List<Map<String, dynamic>>)
|
||||||
.isNotEmpty;
|
.isNotEmpty;
|
||||||
|
|
||||||
while (hasMoreResult) {
|
while (hasMoreResult) {
|
||||||
final res = await http(
|
final res = (await client.get(Uri.parse(
|
||||||
'GET',
|
"${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page")))
|
||||||
json.encode({
|
.body;
|
||||||
"url":
|
|
||||||
"${source.baseUrl}/api/show/$animeUrl/${season["id"]}/$page"
|
|
||||||
}));
|
|
||||||
final epList =
|
final epList =
|
||||||
json.decode(res)["episodes"] as List<Map<String, dynamic>>;
|
json.decode(res)["episodes"] as List<Map<String, dynamic>>;
|
||||||
page++;
|
page++;
|
||||||
@@ -130,9 +118,10 @@ class AniFlix extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"),
|
||||||
final data = {"url": "${source.baseUrl}$url", "headers": headers};
|
headers: getHeader(source.baseUrl)))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
|
print(res);
|
||||||
final jsonRes = json.decode(res)["streams"];
|
final jsonRes = json.decode(res)["streams"];
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final hosterSelection = preferenceHosterSelection(source.id);
|
final hosterSelection = preferenceHosterSelection(source.id);
|
||||||
@@ -140,8 +129,7 @@ class AniFlix extends MProvider {
|
|||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
String quality = '${stream["hoster"]["name"]} - ${stream["lang"]}';
|
String quality = '${stream["hoster"]["name"]} - ${stream["lang"]}';
|
||||||
String link = stream["link"];
|
String link = stream["link"];
|
||||||
print(link);
|
if ((link.contains("https://dood") || link.contains("https://d0")) &&
|
||||||
if (link.contains("https://dood") &&
|
|
||||||
hosterSelection.contains("doodstream")) {
|
hosterSelection.contains("doodstream")) {
|
||||||
a = await doodExtractor(link, quality);
|
a = await doodExtractor(link, quality);
|
||||||
} else if (link.contains("https://streamtape") &&
|
} else if (link.contains("https://streamtape") &&
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get aniflix => _aniflix;
|
Source get aniflix => _aniflix;
|
||||||
const _aniflixVersion = "0.0.15";
|
const _aniflixVersion = "0.0.2";
|
||||||
const _aniflixCodeUrl =
|
const _aniflixCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/de/aniflix/aniflix.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/de/aniflix/aniflix.dart";
|
||||||
Source _aniflix = Source(
|
Source _aniflix = Source(
|
||||||
|
|||||||
@@ -4,22 +4,21 @@ import 'dart:convert';
|
|||||||
class Aniwave extends MProvider {
|
class Aniwave extends MProvider {
|
||||||
Aniwave();
|
Aniwave();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/filter?sort=trending&page=$page"
|
"${preferenceBaseUrl(source.id)}/filter?sort=trending&page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${preferenceBaseUrl(source.id)}/filter?sort=recently_updated&page=$page")))
|
||||||
"${preferenceBaseUrl(source.id)}/filter?sort=recently_updated&page=$page"
|
.body;
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,8 +90,8 @@ class Aniwave extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": "$url&page=$page"};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse("$url&page=$page"))).body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +100,9 @@ class Aniwave extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"Releasing": 0, "Completed": 1}
|
{"Releasing": 0, "Completed": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}${url}"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(res, '//div[contains(text(),"Status")]/span/text()');
|
final status = xpath(res, '//div[contains(text(),"Status")]/span/text()');
|
||||||
if (status.isNotEmpty) {
|
if (status.isNotEmpty) {
|
||||||
@@ -122,11 +122,11 @@ class Aniwave extends MProvider {
|
|||||||
final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id");
|
final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id");
|
||||||
final encrypt = vrfEncrypt(id);
|
final encrypt = vrfEncrypt(id);
|
||||||
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
||||||
final dataEp = {
|
|
||||||
"url": "${preferenceBaseUrl(source.id)}/ajax/episode/list/$id?$vrf"
|
|
||||||
};
|
|
||||||
|
|
||||||
final resEp = await http('GET', json.encode(dataEp));
|
final resEp = (await client.get(Uri.parse(
|
||||||
|
"${preferenceBaseUrl(source.id)}/ajax/episode/list/$id?$vrf")))
|
||||||
|
.body;
|
||||||
|
|
||||||
final html = json.decode(resEp)["result"];
|
final html = json.decode(resEp)["result"];
|
||||||
List<MChapter>? episodesList = [];
|
List<MChapter>? episodesList = [];
|
||||||
|
|
||||||
@@ -172,11 +172,9 @@ class Aniwave extends MProvider {
|
|||||||
final ids = substringBefore(url, "&");
|
final ids = substringBefore(url, "&");
|
||||||
final encrypt = vrfEncrypt(ids);
|
final encrypt = vrfEncrypt(ids);
|
||||||
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
||||||
final res = await http(
|
final res = (await client.get(Uri.parse(
|
||||||
'GET',
|
"${preferenceBaseUrl(source.id)}/ajax/server/list/$ids?$vrf")))
|
||||||
json.encode({
|
.body;
|
||||||
"url": "${preferenceBaseUrl(source.id)}/ajax/server/list/$ids?$vrf"
|
|
||||||
}));
|
|
||||||
final html = json.decode(res)["result"];
|
final html = json.decode(res)["result"];
|
||||||
|
|
||||||
final vidsHtmls = parseHtml(html).select("div.servers > div");
|
final vidsHtmls = parseHtml(html).select("div.servers > div");
|
||||||
@@ -191,12 +189,9 @@ class Aniwave extends MProvider {
|
|||||||
|
|
||||||
final encrypt = vrfEncrypt(serverId);
|
final encrypt = vrfEncrypt(serverId);
|
||||||
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
final vrf = "vrf=${Uri.encodeComponent(encrypt)}";
|
||||||
final res = await http(
|
final res = (await client.get(Uri.parse(
|
||||||
'GET',
|
"${preferenceBaseUrl(source.id)}/ajax/server/$serverId?$vrf")))
|
||||||
json.encode({
|
.body;
|
||||||
"url":
|
|
||||||
"${preferenceBaseUrl(source.id)}/ajax/server/$serverId?$vrf"
|
|
||||||
}));
|
|
||||||
final status = json.decode(res)["status"];
|
final status = json.decode(res)["status"];
|
||||||
if (status == 200) {
|
if (status == 200) {
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
@@ -313,27 +308,24 @@ class Aniwave extends MProvider {
|
|||||||
|
|
||||||
Future<List<MVideo>> vidsrcExtractor(
|
Future<List<MVideo>> vidsrcExtractor(
|
||||||
String url, String name, String type) async {
|
String url, String name, String type) async {
|
||||||
List<String> keys = json.decode(await http(
|
List<String> keys = json.decode((await client.get(Uri.parse(
|
||||||
'GET',
|
"https://raw.githubusercontent.com/Claudemirovsky/worstsource-keys/keys/keys.json")))
|
||||||
json.encode({
|
.body);
|
||||||
"url":
|
|
||||||
"https://raw.githubusercontent.com/Claudemirovsky/worstsource-keys/keys/keys.json"
|
|
||||||
})));
|
|
||||||
final host = Uri.parse(url).host;
|
final host = Uri.parse(url).host;
|
||||||
final apiUrl = await getApiUrl(url, keys);
|
final apiUrl = await getApiUrl(url, keys);
|
||||||
final headers = {
|
|
||||||
"Accept": "application/json, text/javascript, */*; q=0.01",
|
final res = await client.get(Uri.parse(apiUrl, headers: {
|
||||||
"Host": host,
|
"Host": host,
|
||||||
"Referer": Uri.decodeComponent(url),
|
"Referer": Uri.decodeComponent(url),
|
||||||
"X-Requested-With": "XMLHttpRequest"
|
"X-Requested-With": "XMLHttpRequest"
|
||||||
};
|
}));
|
||||||
final res =
|
|
||||||
await http('GET', json.encode({"url": apiUrl, "headers": headers}));
|
if (res.statusCode != 200) return [];
|
||||||
if (res == "error") return [];
|
|
||||||
String masterUrl =
|
String masterUrl = ((json.decode(res.body)['result']['sources']
|
||||||
((json.decode(res)['result']['sources'] as List<Map<String, dynamic>>)
|
as List<Map<String, dynamic>>)
|
||||||
.first)['file'];
|
.first)['file'];
|
||||||
final tracks = (json.decode(res)['result']['tracks'] as List)
|
final tracks = (json.decode(res.body)['result']['tracks'] as List)
|
||||||
.where((e) => e['kind'] == 'captions' ? true : false)
|
.where((e) => e['kind'] == 'captions' ? true : false)
|
||||||
.toList();
|
.toList();
|
||||||
List<MTrack> subtitles = [];
|
List<MTrack> subtitles = [];
|
||||||
@@ -348,8 +340,8 @@ class Aniwave extends MProvider {
|
|||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
List<MVideo> videoList = [];
|
List<MVideo> videoList = [];
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
@@ -403,7 +395,8 @@ class Aniwave extends MProvider {
|
|||||||
|
|
||||||
Future<String> callFromFuToken(String host, String data) async {
|
Future<String> callFromFuToken(String host, String data) async {
|
||||||
final fuTokenScript =
|
final fuTokenScript =
|
||||||
await http('GET', json.encode({"url": "https://$host/futoken"}));
|
(await client.get(Uri.parse("https://$host/futoken"))).body;
|
||||||
|
|
||||||
String js = "";
|
String js = "";
|
||||||
js += "(function";
|
js += "(function";
|
||||||
js += substringBefore(
|
js += substringBefore(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get aniwave => _aniwave;
|
Source get aniwave => _aniwave;
|
||||||
const _aniwaveVersion = "0.0.45";
|
const _aniwaveVersion = "0.0.5";
|
||||||
const _aniwaveCodeUrl =
|
const _aniwaveCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/aniwave/aniwave.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/aniwave/aniwave.dart";
|
||||||
Source _aniwave = Source(
|
Source _aniwave = Source(
|
||||||
|
|||||||
@@ -3,12 +3,14 @@ import 'dart:convert';
|
|||||||
|
|
||||||
class DramaCool extends MProvider {
|
class DramaCool extends MProvider {
|
||||||
DramaCool();
|
DramaCool();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/most-popular-drama?page=$page"
|
"${preferenceBaseUrl(source.id)}/most-popular-drama?page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return animeFromElement(document.select("ul.list-episode-item li a"),
|
return animeFromElement(document.select("ul.list-episode-item li a"),
|
||||||
document.selectFirst("li.next a")?.attr("href") != null);
|
document.selectFirst("li.next a")?.attr("href") != null);
|
||||||
@@ -16,10 +18,9 @@ class DramaCool extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/recently-added?page=$page"
|
"${preferenceBaseUrl(source.id)}/recently-added?page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return animeFromElement(document.select("ul.switch-block a"),
|
return animeFromElement(document.select("ul.switch-block a"),
|
||||||
document.selectFirst("li.next a")?.attr("href") != null);
|
document.selectFirst("li.next a")?.attr("href") != null);
|
||||||
@@ -28,10 +29,9 @@ class DramaCool extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/search?keyword=$query&page=$page"
|
"${preferenceBaseUrl(source.id)}/search?keyword=$query&page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return animeFromElement(document.select("ul.list-episode-item li a"),
|
return animeFromElement(document.select("ul.list-episode-item li a"),
|
||||||
document.selectFirst("li.next a")?.attr("href") != null);
|
document.selectFirst("li.next a")?.attr("href") != null);
|
||||||
@@ -44,14 +44,16 @@ class DramaCool extends MProvider {
|
|||||||
];
|
];
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
if (url.contains("-episode-") && url.endsWith(".html")) {
|
if (url.contains("-episode-") && url.endsWith(".html")) {
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
url = parseHtml(res).selectFirst("div.category a").attr("href");
|
url = parseHtml(res).selectFirst("div.category a").attr("href");
|
||||||
}
|
}
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
|
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
anime.description = document
|
anime.description = document
|
||||||
@@ -100,16 +102,17 @@ class DramaCool extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res =
|
||||||
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
String iframeUrl = document.selectFirst("iframe")?.getSrc ?? "";
|
String iframeUrl = document.selectFirst("iframe")?.getSrc ?? "";
|
||||||
if (iframeUrl.isEmpty) return [];
|
if (iframeUrl.isEmpty) return [];
|
||||||
if (iframeUrl.startsWith("//")) {
|
if (iframeUrl.startsWith("//")) {
|
||||||
iframeUrl = "https:$iframeUrl";
|
iframeUrl = "https:$iframeUrl";
|
||||||
}
|
}
|
||||||
var iframeDoc =
|
var iframeDoc = parseHtml((await client.get(Uri.parse(iframeUrl))).body);
|
||||||
parseHtml(await http('GET', json.encode({"url": iframeUrl})));
|
|
||||||
final serverElements = iframeDoc.select("ul.list-server-items li");
|
final serverElements = iframeDoc.select("ul.list-server-items li");
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (var serverElement in serverElements) {
|
for (var serverElement in serverElements) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get dramacoolSource => _dramacoolSource;
|
Source get dramacoolSource => _dramacoolSource;
|
||||||
const _dramacoolVersion = "0.0.1";
|
const _dramacoolVersion = "0.0.15";
|
||||||
const _dramacoolSourceCodeUrl =
|
const _dramacoolSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/dramacool/dramacool.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/dramacool/dramacool.dart";
|
||||||
Source _dramacoolSource = Source(
|
Source _dramacoolSource = Source(
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ import 'dart:convert';
|
|||||||
class GogoAnime extends MProvider {
|
class GogoAnime extends MProvider {
|
||||||
GogoAnime();
|
GogoAnime();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${preferenceBaseUrl(source.id)}/popular.html?page=$page"
|
"${preferenceBaseUrl(source.id)}/popular.html?page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//*[@class="img"]/a/@href');
|
final urls = xpath(res, '//*[@class="img"]/a/@href');
|
||||||
@@ -29,11 +30,9 @@ class GogoAnime extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1")))
|
||||||
"https://ajax.gogo-load.com/ajax/page-recent-release-ongoing.html?page=$page&type=1"
|
.body;
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls =
|
final urls =
|
||||||
@@ -143,8 +142,7 @@ class GogoAnime extends MProvider {
|
|||||||
"${preferenceBaseUrl(source.id)}/filter.html?keyword=$query$filterStr&page=$page";
|
"${preferenceBaseUrl(source.id)}/filter.html?keyword=$query$filterStr&page=$page";
|
||||||
}
|
}
|
||||||
|
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//*[@class="img"]/a/@href');
|
final urls = xpath(res, '//*[@class="img"]/a/@href');
|
||||||
@@ -165,13 +163,12 @@ class GogoAnime extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final statusList = [
|
final statusList = [
|
||||||
{
|
{"Ongoing": 0, "Completed": 1}
|
||||||
"Ongoing": 0,
|
|
||||||
"Completed": 1,
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res =
|
||||||
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(
|
final status = xpath(
|
||||||
res, '//*[@class="anime_info_body_bg"]/p[@class="type"][5]/text()')
|
res, '//*[@class="anime_info_body_bg"]/p[@class="type"][5]/text()')
|
||||||
@@ -191,8 +188,8 @@ class GogoAnime extends MProvider {
|
|||||||
final id = xpath(res, '//*[@id="movie_id"]/@value').first;
|
final id = xpath(res, '//*[@id="movie_id"]/@value').first;
|
||||||
final urlEp =
|
final urlEp =
|
||||||
"https://ajax.gogo-load.com/ajax/load-list-episode?ep_start=0&ep_end=4000&id=$id";
|
"https://ajax.gogo-load.com/ajax/load-list-episode?ep_start=0&ep_end=4000&id=$id";
|
||||||
final dataEp = {"url": urlEp};
|
|
||||||
final resEp = await http('GET', json.encode(dataEp));
|
final resEp = (await client.get(Uri.parse(urlEp))).body;
|
||||||
|
|
||||||
final epUrls = xpath(resEp, '//*[@id="episode_related"]/li/a/@href');
|
final epUrls = xpath(resEp, '//*[@id="episode_related"]/li/a/@href');
|
||||||
final names = xpath(
|
final names = xpath(
|
||||||
@@ -216,9 +213,9 @@ class GogoAnime extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final datas = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
final res = await http('GET', json.encode(datas));
|
.body;
|
||||||
final serverUrls =
|
final serverUrls =
|
||||||
xpath(res, '//*[@class="anime_muti_link"]/ul/li/a/@data-video');
|
xpath(res, '//*[@class="anime_muti_link"]/ul/li/a/@data-video');
|
||||||
final serverNames =
|
final serverNames =
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get gogoanimeSource => _gogoanimeSource;
|
Source get gogoanimeSource => _gogoanimeSource;
|
||||||
const _gogoanimeVersion = "0.0.65";
|
const _gogoanimeVersion = "0.0.7";
|
||||||
const _gogoanimeSourceCodeUrl =
|
const _gogoanimeSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/gogoanime/gogoanime.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/gogoanime/gogoanime.dart";
|
||||||
Source _gogoanimeSource = Source(
|
Source _gogoanimeSource = Source(
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ import 'dart:convert';
|
|||||||
class KissKh extends MProvider {
|
class KissKh extends MProvider {
|
||||||
KissKh();
|
KissKh();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=1&pageSize=40")))
|
||||||
"${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=1&pageSize=40"
|
.body;
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
final datas = jsonRes["data"];
|
final datas = jsonRes["data"];
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
@@ -31,12 +31,9 @@ class KissKh extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url":
|
"${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=12&pageSize=40")))
|
||||||
"${source.baseUrl}/api/DramaList/List?page=$page&type=0&sub=0&country=0&status=0&order=12&pageSize=40",
|
.body;
|
||||||
"header": {"ee": "eee"}
|
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
final datas = jsonRes["data"];
|
final datas = jsonRes["data"];
|
||||||
|
|
||||||
@@ -59,10 +56,9 @@ class KissKh extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${source.baseUrl}/api/DramaList/Search?q=$query&type=0"
|
"${source.baseUrl}/api/DramaList/Search?q=$query&type=0")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
for (var data in jsonRes) {
|
for (var data in jsonRes) {
|
||||||
@@ -81,8 +77,7 @@ class KissKh extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"Ongoing": 0, "Completed": 1}
|
{"Ongoing": 0, "Completed": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
final status = jsonRes["status"] ?? "";
|
final status = jsonRes["status"] ?? "";
|
||||||
@@ -120,14 +115,12 @@ class KissKh extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final datas = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
final id = substringAfter(substringBefore(url, ".png"), "Episode/");
|
final id = substringAfter(substringBefore(url, ".png"), "Episode/");
|
||||||
final jsonRes = json.decode(res);
|
final jsonRes = json.decode(res);
|
||||||
|
|
||||||
final subRes = await http(
|
final subRes =
|
||||||
'GET', json.encode({"url": "${source.baseUrl}/api/Sub/$id"}));
|
(await client.get(Uri.parse("${source.baseUrl}/api/Sub/$id"))).body;
|
||||||
var jsonSubRes = json.decode(subRes);
|
var jsonSubRes = json.decode(subRes);
|
||||||
|
|
||||||
List<MTrack> subtitles = [];
|
List<MTrack> subtitles = [];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get kisskhSource => _kisskhSource;
|
Source get kisskhSource => _kisskhSource;
|
||||||
const _kisskhVersion = "0.0.45";
|
const _kisskhVersion = "0.0.5";
|
||||||
const _kisskhSourceCodeUrl =
|
const _kisskhSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/kisskh/kisskh.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/kisskh/kisskh.dart";
|
||||||
Source _kisskhSource = Source(
|
Source _kisskhSource = Source(
|
||||||
|
|||||||
@@ -4,19 +4,21 @@ import 'dart:convert';
|
|||||||
class NineAnimeTv extends MProvider {
|
class NineAnimeTv extends MProvider {
|
||||||
NineAnimeTv();
|
NineAnimeTv();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/filter?sort=all&page=$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/filter?sort=all&page=$page")))
|
||||||
|
.body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${source.baseUrl}/filter?sort=recently_updated&page=$page"
|
"${source.baseUrl}/filter?sort=recently_updated&page=$page")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,8 +107,8 @@ class NineAnimeTv extends MProvider {
|
|||||||
url += "${ll(url)}sort=$sort";
|
url += "${ll(url)}sort=$sort";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": "$url&page=$page"};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse("$url&page=$page"))).body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,8 +117,8 @@ class NineAnimeTv extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"Currently Airing": 0, "Finished Airing": 1}
|
{"Currently Airing": 0, "Finished Airing": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": "${source.baseUrl}${url}"};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
final infoElement = document.selectFirst("div.film-infor");
|
final infoElement = document.selectFirst("div.film-infor");
|
||||||
@@ -125,7 +127,7 @@ class NineAnimeTv extends MProvider {
|
|||||||
"";
|
"";
|
||||||
anime.status = parseStatus(status, statusList);
|
anime.status = parseStatus(status, statusList);
|
||||||
anime.description =
|
anime.description =
|
||||||
infoElement.selectFirst("div.film-description > p").text ?? "";
|
infoElement.selectFirst("div.film-description > p")?.text ?? "";
|
||||||
anime.author = infoElement.xpathFirst(
|
anime.author = infoElement.xpathFirst(
|
||||||
'//div[contains(text(),"Studios:")]/following-sibling::div/a/text()') ??
|
'//div[contains(text(),"Studios:")]/following-sibling::div/a/text()') ??
|
||||||
"";
|
"";
|
||||||
@@ -134,9 +136,9 @@ class NineAnimeTv extends MProvider {
|
|||||||
'//div[contains(text(),"Genre:")]/following-sibling::div/a/text()');
|
'//div[contains(text(),"Genre:")]/following-sibling::div/a/text()');
|
||||||
final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id");
|
final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id");
|
||||||
|
|
||||||
final dataEp = {"url": "${source.baseUrl}/ajax/episode/list/$id"};
|
final resEp =
|
||||||
|
(await client.get(Uri.parse("${source.baseUrl}/ajax/episode/list/$id")))
|
||||||
final resEp = await http('GET', json.encode(dataEp));
|
.body;
|
||||||
final html = json.decode(resEp)["html"];
|
final html = json.decode(resEp)["html"];
|
||||||
|
|
||||||
List<MChapter>? episodesList = [];
|
List<MChapter>? episodesList = [];
|
||||||
@@ -160,10 +162,10 @@ class NineAnimeTv extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res = await http(
|
final res = (await client.get(
|
||||||
'GET',
|
Uri.parse("${source.baseUrl}/ajax/episode/servers?episodeId=$url")))
|
||||||
json.encode(
|
.body;
|
||||||
{"url": "${source.baseUrl}/ajax/episode/servers?episodeId=$url"}));
|
|
||||||
final html = json.decode(res)["html"];
|
final html = json.decode(res)["html"];
|
||||||
|
|
||||||
final serverElements = parseHtml(html).select("div.server-item");
|
final serverElements = parseHtml(html).select("div.server-item");
|
||||||
@@ -175,10 +177,9 @@ class NineAnimeTv extends MProvider {
|
|||||||
final name = serverElement.text;
|
final name = serverElement.text;
|
||||||
final id = serverElement.attr("data-id");
|
final id = serverElement.attr("data-id");
|
||||||
final subDub = serverElement.attr("data-type");
|
final subDub = serverElement.attr("data-type");
|
||||||
final res = await http(
|
final res = (await client
|
||||||
'GET',
|
.get(Uri.parse("${source.baseUrl}/ajax/episode/sources?id=$id")))
|
||||||
json.encode(
|
.body;
|
||||||
{"url": "${source.baseUrl}/ajax/episode/sources?id=$id"}));
|
|
||||||
final epUrl = json.decode(res)["link"];
|
final epUrl = json.decode(res)["link"];
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get nineanimetv => _nineanimetv;
|
Source get nineanimetv => _nineanimetv;
|
||||||
const _nineanimetvVersion = "0.0.15";
|
const _nineanimetvVersion = "0.0.2";
|
||||||
const _nineanimetvCodeUrl =
|
const _nineanimetvCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/nineanimetv/nineanimetv.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/nineanimetv/nineanimetv.dart";
|
||||||
Source _nineanimetv = Source(
|
Source _nineanimetv = Source(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get uhdmoviesSource => _uhdmoviesSource;
|
Source get uhdmoviesSource => _uhdmoviesSource;
|
||||||
const _uhdmoviesVersion = "0.0.2";
|
const _uhdmoviesVersion = "0.0.25";
|
||||||
const _uhdmoviesSourceCodeUrl =
|
const _uhdmoviesSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/uhdmovies/uhdmovies.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/en/uhdmovies/uhdmovies.dart";
|
||||||
Source _uhdmoviesSource = Source(
|
Source _uhdmoviesSource = Source(
|
||||||
|
|||||||
@@ -4,13 +4,16 @@ import 'dart:convert';
|
|||||||
class UHDMovies extends MProvider {
|
class UHDMovies extends MProvider {
|
||||||
UHDMovies();
|
UHDMovies();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsLatest => false;
|
bool get supportsLatest => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}/page/$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${preferenceBaseUrl(source.id)}/page/$page")))
|
||||||
|
.body;
|
||||||
return animeFromElement(res);
|
return animeFromElement(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,18 +25,18 @@ class UHDMovies extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
'${preferenceBaseUrl(source.id)}/page/$page/?s=${query.replaceAll(" ", "+")}';
|
"${preferenceBaseUrl(source.id)}/page/$page/?s=${query.replaceAll(" ", "+")}")))
|
||||||
final data = {"url": url};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return animeFromElement(res);
|
return animeFromElement(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}${url}"};
|
final res =
|
||||||
String res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}${url}")))
|
||||||
|
.body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final description = xpath(res, '//pre/span/text()');
|
final description = xpath(res, '//pre/span/text()');
|
||||||
if (description.isNotEmpty) {
|
if (description.isNotEmpty) {
|
||||||
@@ -141,7 +144,7 @@ class UHDMovies extends MProvider {
|
|||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (int type = 1; type < 3; type++) {
|
for (int type = 1; type < 3; type++) {
|
||||||
url = url.replaceAll("/file/", "/wfile/") + "?type=$type";
|
url = url.replaceAll("/file/", "/wfile/") + "?type=$type";
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final links = xpath(res, '//div[@class="mb-4"]/a/@href');
|
final links = xpath(res, '//div[@class="mb-4"]/a/@href');
|
||||||
for (int i = 0; i < links.length; i++) {
|
for (int i = 0; i < links.length; i++) {
|
||||||
final link = links[i];
|
final link = links[i];
|
||||||
@@ -167,9 +170,9 @@ class UHDMovies extends MProvider {
|
|||||||
if (url.contains("?sid=")) {
|
if (url.contains("?sid=")) {
|
||||||
final finalUrl = await redirectorBypasser(url);
|
final finalUrl = await redirectorBypasser(url);
|
||||||
host = Uri.parse(finalUrl).host;
|
host = Uri.parse(finalUrl).host;
|
||||||
res = await http('GET', json.encode({"url": finalUrl}));
|
res = (await client.get(Uri.parse(finalUrl))).body;
|
||||||
} else if (url.contains("r?key=")) {
|
} else if (url.contains("r?key=")) {
|
||||||
res = await http('GET', json.encode({"url": url}));
|
res = (await client.get(Uri.parse(url))).body;
|
||||||
host = Uri.parse(url).host;
|
host = Uri.parse(url).host;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
@@ -180,7 +183,7 @@ class UHDMovies extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<String> redirectorBypasser(String url) async {
|
Future<String> redirectorBypasser(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
String lastDoc = await recursiveDoc(url, res);
|
String lastDoc = await recursiveDoc(url, res);
|
||||||
final js = xpath(lastDoc, '//script[contains(text(), "/?go=")]/text()');
|
final js = xpath(lastDoc, '//script[contains(text(), "/?go=")]/text()');
|
||||||
if (js.isEmpty) return "";
|
if (js.isEmpty) return "";
|
||||||
@@ -191,12 +194,9 @@ class UHDMovies extends MProvider {
|
|||||||
String cookieName = substringAfter(nextUrl, "go=");
|
String cookieName = substringAfter(nextUrl, "go=");
|
||||||
String cookieValue =
|
String cookieValue =
|
||||||
substringBefore(substringAfter(script, "'$cookieName', '"), "'");
|
substringBefore(substringAfter(script, "'$cookieName', '"), "'");
|
||||||
final response = await http(
|
final response = (await client.get(Uri.parse(nextUrl),
|
||||||
'GET',
|
headers: {"referer": url, "Cookie": "$cookieName=$cookieValue"}))
|
||||||
json.encode({
|
.body;
|
||||||
"url": nextUrl,
|
|
||||||
"headers": {"referer": url, "Cookie": "$cookieName=$cookieValue"}
|
|
||||||
}));
|
|
||||||
|
|
||||||
final lastRes =
|
final lastRes =
|
||||||
parseHtml(response).selectFirst("meta[http-equiv]").attr("content");
|
parseHtml(response).selectFirst("meta[http-equiv]").attr("content");
|
||||||
@@ -226,14 +226,9 @@ class UHDMovies extends MProvider {
|
|||||||
final name = xpath(html, '//input/@name').first;
|
final name = xpath(html, '//input/@name').first;
|
||||||
final value = xpath(html, '//input/@value').first;
|
final value = xpath(html, '//input/@value').first;
|
||||||
final body = {"$name": value};
|
final body = {"$name": value};
|
||||||
final response = await http(
|
final response = (await client.post(Uri.parse(urlR.first),
|
||||||
'POST',
|
headers: {"referer": url}, body: body))
|
||||||
json.encode({
|
.body;
|
||||||
"useFormBuilder": true,
|
|
||||||
"body": body,
|
|
||||||
"url": urlR.first,
|
|
||||||
"headers": {"referer": url}
|
|
||||||
}));
|
|
||||||
return recursiveDoc(url, response);
|
return recursiveDoc(url, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ import 'dart:convert';
|
|||||||
class AnimeSama extends MProvider {
|
class AnimeSama extends MProvider {
|
||||||
AnimeSama();
|
AnimeSama();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/#$page"};
|
final doc = (await client.get(Uri.parse("${source.baseUrl}/#$page"))).body;
|
||||||
final doc = await http('GET', json.encode(data));
|
|
||||||
final regex = RegExp(r"""^\s*carteClassique\(\s*.*?\s*,\s*"(.*?)".*\)""",
|
final regex = RegExp(r"""^\s*carteClassique\(\s*.*?\s*,\s*"(.*?)".*\)""",
|
||||||
multiLine: true);
|
multiLine: true);
|
||||||
var matches = regex.allMatches(doc).toList();
|
var matches = regex.allMatches(doc).toList();
|
||||||
@@ -24,7 +25,7 @@ class AnimeSama extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final res = await http('GET', json.encode({"url": source.baseUrl}));
|
final res = (await client.get(Uri.parse(source.baseUrl))).body;
|
||||||
var document = parseHtml(res);
|
var document = parseHtml(res);
|
||||||
final latest = document
|
final latest = document
|
||||||
.select("h2")
|
.select("h2")
|
||||||
@@ -46,8 +47,9 @@ class AnimeSama extends MProvider {
|
|||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final filters = filterList.filters;
|
final filters = filterList.filters;
|
||||||
final res = await http('GET',
|
final res = (await client
|
||||||
json.encode({"url": "${source.baseUrl}/catalogue/listing_all.php"}));
|
.get(Uri.parse("${source.baseUrl}/catalogue/listing_all.php")))
|
||||||
|
.body;
|
||||||
var databaseElements = parseHtml(res).select(".cardListAnime");
|
var databaseElements = parseHtml(res).select(".cardListAnime");
|
||||||
List<MElement> elements = [];
|
List<MElement> elements = [];
|
||||||
elements = databaseElements
|
elements = databaseElements
|
||||||
@@ -236,7 +238,8 @@ class AnimeSama extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MManga>> fetchAnimeSeasons(String url) async {
|
Future<List<MManga>> fetchAnimeSeasons(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
var document = parseHtml(res);
|
var document = parseHtml(res);
|
||||||
String animeName = document.getElementById("titreOeuvre")?.text ?? "";
|
String animeName = document.getElementById("titreOeuvre")?.text ?? "";
|
||||||
|
|
||||||
@@ -259,7 +262,7 @@ class AnimeSama extends MProvider {
|
|||||||
if (movies.isNotEmpty) {
|
if (movies.isNotEmpty) {
|
||||||
var movieNameRegex =
|
var movieNameRegex =
|
||||||
RegExp("^\\s*newSPF\\(\"(.*)\"\\);", multiLine: true);
|
RegExp("^\\s*newSPF\\(\"(.*)\"\\);", multiLine: true);
|
||||||
var moviesDoc = await http('GET', json.encode({"url": moviesUrl}));
|
var moviesDoc = (await client.get(Uri.parse(moviesUrl))).body;
|
||||||
List<RegExpMatch> matches =
|
List<RegExpMatch> matches =
|
||||||
movieNameRegex.allMatches(moviesDoc).toList();
|
movieNameRegex.allMatches(moviesDoc).toList();
|
||||||
|
|
||||||
@@ -312,7 +315,7 @@ class AnimeSama extends MProvider {
|
|||||||
Future<List<List<String>>> fetchPlayers(String url) async {
|
Future<List<List<String>>> fetchPlayers(String url) async {
|
||||||
var docUrl = "$url/episodes.js";
|
var docUrl = "$url/episodes.js";
|
||||||
List<List<String>> players = [];
|
List<List<String>> players = [];
|
||||||
var response = await http('GET', json.encode({"url": docUrl}));
|
var response = (await client.get(Uri.parse(docUrl))).body;
|
||||||
|
|
||||||
if (response == "error") {
|
if (response == "error") {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get animesamaSource => _animesama;
|
Source get animesamaSource => _animesama;
|
||||||
const animesamaVersion = "0.0.1";
|
const animesamaVersion = "0.0.15";
|
||||||
const animesamaCodeUrl =
|
const animesamaCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/animesama/animesama.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/animesama/animesama.dart";
|
||||||
Source _animesama = Source(
|
Source _animesama = Source(
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ import 'dart:convert';
|
|||||||
class AnimesUltra extends MProvider {
|
class AnimesUltra extends MProvider {
|
||||||
AnimesUltra();
|
AnimesUltra();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/"};
|
final res = (await client.get(Uri.parse(source.baseUrl))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res,
|
final urls = xpath(res,
|
||||||
@@ -30,8 +31,7 @@ class AnimesUltra extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/"};
|
final res = (await client.get(Uri.parse(source.baseUrl))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res,
|
final urls = xpath(res,
|
||||||
@@ -55,8 +55,7 @@ class AnimesUltra extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {"url": "${source.baseUrl}/"};
|
final res = (await client.get(Uri.parse(source.baseUrl))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//*[@class="film-poster"]/a/@href');
|
final urls = xpath(res, '//*[@class="film-poster"]/a/@href');
|
||||||
@@ -77,13 +76,10 @@ class AnimesUltra extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final statusList = [
|
final statusList = [
|
||||||
{
|
{"En cours": 0, "Terminé": 1}
|
||||||
"En cours": 0,
|
|
||||||
"Terminé": 1,
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
anime.description =
|
anime.description =
|
||||||
xpath(res, '//*[@class="film-description m-hide"]/text()').first;
|
xpath(res, '//*[@class="film-description m-hide"]/text()').first;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get animesultraSource => _animesultraSource;
|
Source get animesultraSource => _animesultraSource;
|
||||||
const _animesultraVersion = "0.0.5";
|
const _animesultraVersion = "0.0.55";
|
||||||
const _animesultraSourceCodeUrl =
|
const _animesultraSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/animesultra/animesultra.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/animesultra/animesultra.dart";
|
||||||
Source _animesultraSource = Source(
|
Source _animesultraSource = Source(
|
||||||
|
|||||||
@@ -4,13 +4,11 @@ import 'dart:convert';
|
|||||||
class FrAnime extends MProvider {
|
class FrAnime extends MProvider {
|
||||||
FrAnime();
|
FrAnime();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = await dataBase();
|
||||||
"url": "https://api.franime.fr/api/animes/",
|
|
||||||
"headers": {"Referer": "https://franime.fr/"}
|
|
||||||
};
|
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return animeResList(res);
|
return animeResList(res);
|
||||||
}
|
}
|
||||||
@@ -87,8 +85,8 @@ class FrAnime extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
String language = "vo".toString();
|
String language = "vo";
|
||||||
String videoBaseUrl = "https://api.franime.fr/api/anime".toString();
|
String videoBaseUrl = "https://api.franime.fr/api/anime";
|
||||||
if (url.contains("lang=")) {
|
if (url.contains("lang=")) {
|
||||||
language = substringBefore(substringAfter(url, "lang="), "&");
|
language = substringBefore(substringAfter(url, "lang="), "&");
|
||||||
}
|
}
|
||||||
@@ -136,7 +134,7 @@ class FrAnime extends MProvider {
|
|||||||
} else if (language == "vf" && hasVf) {
|
} else if (language == "vf" && hasVf) {
|
||||||
players = vfPlayers;
|
players = vfPlayers;
|
||||||
}
|
}
|
||||||
print(players);
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (var i = 0; i < players.length; i++) {
|
for (var i = 0; i < players.length; i++) {
|
||||||
String apiUrl = "$videoBaseUrl/$language/$i";
|
String apiUrl = "$videoBaseUrl/$language/$i";
|
||||||
@@ -144,11 +142,9 @@ class FrAnime extends MProvider {
|
|||||||
|
|
||||||
MVideo video = MVideo();
|
MVideo video = MVideo();
|
||||||
|
|
||||||
final data = {
|
final playerUrl = (await client.get(Uri.parse(apiUrl),
|
||||||
"url": apiUrl,
|
headers: {"Referer": "https://franime.fr/"}))
|
||||||
"headers": {"Referer": "https://franime.fr/"}
|
.body;
|
||||||
};
|
|
||||||
final playerUrl = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
if (playerName.contains("vido")) {
|
if (playerName.contains("vido")) {
|
||||||
@@ -324,16 +320,12 @@ class FrAnime extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<String> dataBase() async {
|
Future<String> dataBase() async {
|
||||||
final data = {
|
return (await client.get(Uri.parse("https://api.franime.fr/api/animes/"),
|
||||||
"url": "https://api.franime.fr/api/animes/",
|
headers: {"Referer": "https://franime.fr/"}))
|
||||||
"headers": {"Referer": "https://franime.fr/"}
|
.body;
|
||||||
};
|
|
||||||
|
|
||||||
return await http('GET', json.encode(data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String databaseAnimeByTitleO(String res, String titleO) {
|
String databaseAnimeByTitleO(String res, String titleO) {
|
||||||
print(titleO);
|
|
||||||
final datas = json.decode(res) as List<Map<String, dynamic>>;
|
final datas = json.decode(res) as List<Map<String, dynamic>>;
|
||||||
for (var data in datas) {
|
for (var data in datas) {
|
||||||
String title =
|
String title =
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get franimeSource => _franimeSource;
|
Source get franimeSource => _franimeSource;
|
||||||
const _franimeVersion = "0.0.55";
|
const _franimeVersion = "0.0.6";
|
||||||
const _franimeSourceCodeUrl =
|
const _franimeSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/franime/franime.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/franime/franime.dart";
|
||||||
Source _franimeSource = Source(
|
Source _franimeSource = Source(
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import 'dart:convert';
|
|||||||
class OtakuFr extends MProvider {
|
class OtakuFr extends MProvider {
|
||||||
OtakuFr();
|
OtakuFr();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/en-cours/page/$page"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${source.baseUrl}/en-cours/page/$page")))
|
||||||
|
.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');
|
||||||
@@ -29,8 +32,8 @@ class OtakuFr extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/page/$page/"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(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');
|
||||||
@@ -91,8 +94,8 @@ class OtakuFr extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls =
|
final urls =
|
||||||
@@ -118,14 +121,12 @@ class OtakuFr extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"En cours": 0, "Terminé": 1}
|
{"En cours": 0, "Terminé": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
String res = (await client.get(Uri.parse(url))).body;
|
||||||
String res = await http('GET', json.encode(data));
|
|
||||||
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');
|
||||||
if (originalUrl.isNotEmpty) {
|
if (originalUrl.isNotEmpty) {
|
||||||
final newData = {"url": originalUrl.first};
|
res = (await client.get(Uri.parse(originalUrl.first))).body;
|
||||||
res = await http('GET', json.encode(newData));
|
|
||||||
}
|
}
|
||||||
final description =
|
final description =
|
||||||
xpath(res, '//*[@class="episode fz-sm synop"]/p/text()');
|
xpath(res, '//*[@class="episode fz-sm synop"]/p/text()');
|
||||||
@@ -171,18 +172,15 @@ class OtakuFr extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
final servers = xpath(res, '//*[@id="nav-tabContent"]/div/iframe/@src');
|
final servers = xpath(res, '//*[@id="nav-tabContent"]/div/iframe/@src');
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final hosterSelection = preferenceHosterSelection(source.id);
|
final hosterSelection = preferenceHosterSelection(source.id);
|
||||||
for (var url in servers) {
|
for (var url in servers) {
|
||||||
final datasServer = {
|
final resServer = (await client.get(Uri.parse(fixUrl(url)),
|
||||||
"url": fixUrl(url),
|
headers: {"X-Requested-With": "XMLHttpRequest"}))
|
||||||
"headers": {"X-Requested-With": "XMLHttpRequest"}
|
.body;
|
||||||
};
|
|
||||||
|
|
||||||
final resServer = await http('GET', json.encode(datasServer));
|
|
||||||
final serverUrl =
|
final serverUrl =
|
||||||
fixUrl(regExp(resServer, r"data-url='([^']+)'", '', 1, 1));
|
fixUrl(regExp(resServer, r"data-url='([^']+)'", '', 1, 1));
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
@@ -356,15 +354,14 @@ class OtakuFr extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> upstreamExtractor(String url) async {
|
Future<List<MVideo>> upstreamExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final js = xpath(res, '//script[contains(text(), "m3u8")]/text()');
|
final js = xpath(res, '//script[contains(text(), "m3u8")]/text()');
|
||||||
if (js.isEmpty) {
|
if (js.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
final masterUrl =
|
final masterUrl =
|
||||||
substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}");
|
substringBefore(substringAfter(unpackJs(js.first), "{file:\""), "\"}");
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
@@ -389,7 +386,7 @@ class OtakuFr extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> vidbmExtractor(String url) async {
|
Future<List<MVideo>> vidbmExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final js = xpath(res,
|
final js = xpath(res,
|
||||||
'//script[contains(text(), "m3u8") or contains(text(), "mp4")]/text()');
|
'//script[contains(text(), "m3u8") or contains(text(), "mp4")]/text()');
|
||||||
if (js.isEmpty) {
|
if (js.isEmpty) {
|
||||||
@@ -405,8 +402,7 @@ class OtakuFr extends MProvider {
|
|||||||
"\"");
|
"\"");
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
if (masterUrl.contains("m3u8")) {
|
if (masterUrl.contains("m3u8")) {
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get otakufr => _otakufr;
|
Source get otakufr => _otakufr;
|
||||||
const otakufrVersion = "0.0.65";
|
const otakufrVersion = "0.0.7";
|
||||||
const otakufrCodeUrl =
|
const otakufrCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/otakufr/otakufr.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/fr/otakufr/otakufr.dart";
|
||||||
Source _otakufr = Source(
|
Source _otakufr = Source(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get yomoviesSource => _yomoviesSource;
|
Source get yomoviesSource => _yomoviesSource;
|
||||||
const _yomoviesVersion = "0.0.1";
|
const _yomoviesVersion = "0.0.15";
|
||||||
const _yomoviesSourceCodeUrl =
|
const _yomoviesSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/hi/yomovies/yomovies.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/hi/yomovies/yomovies.dart";
|
||||||
Source _yomoviesSource = Source(
|
Source _yomoviesSource = Source(
|
||||||
|
|||||||
@@ -4,17 +4,18 @@ import 'dart:convert';
|
|||||||
class YoMovies extends MProvider {
|
class YoMovies extends MProvider {
|
||||||
YoMovies();
|
YoMovies();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get supportsLatest => false;
|
bool get supportsLatest => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
String pageNu = page == 1 ? "" : "page/$page/";
|
String pageNu = page == 1 ? "" : "page/$page/";
|
||||||
final data = {
|
|
||||||
"url": "${preferenceBaseUrl(source.id)}/most-favorites/$pageNu"
|
|
||||||
};
|
|
||||||
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(
|
||||||
|
"${preferenceBaseUrl(source.id)}/most-favorites/$pageNu")))
|
||||||
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return animeFromElement(
|
return animeFromElement(
|
||||||
document.select("div.movies-list > div.ml-item"),
|
document.select("div.movies-list > div.ml-item"),
|
||||||
@@ -46,7 +47,7 @@ class YoMovies extends MProvider {
|
|||||||
}
|
}
|
||||||
url = "${preferenceBaseUrl(source.id)}$url$pageNu";
|
url = "${preferenceBaseUrl(source.id)}$url$pageNu";
|
||||||
}
|
}
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return animeFromElement(
|
return animeFromElement(
|
||||||
document.select("div.movies-list > div.ml-item"),
|
document.select("div.movies-list > div.ml-item"),
|
||||||
@@ -58,8 +59,9 @@ class YoMovies extends MProvider {
|
|||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
|
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
var infoElement = document.selectFirst("div.mvi-content");
|
var infoElement = document.selectFirst("div.mvi-content");
|
||||||
@@ -96,8 +98,9 @@ class YoMovies extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
url = Uri.parse(url).path;
|
url = Uri.parse(url).path;
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$url")))
|
||||||
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
final serverElements = document.select("div.movieplay > iframe");
|
final serverElements = document.select("div.movieplay > iframe");
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
@@ -135,18 +138,14 @@ class YoMovies extends MProvider {
|
|||||||
|
|
||||||
Future<List<MVideo>> minoplresExtractor(String url) async {
|
Future<List<MVideo>> minoplresExtractor(String url) async {
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final res = await http(
|
|
||||||
'GET',
|
final res =
|
||||||
json.encode({
|
(await client.get(Uri.parse(url), headers: {"Referer": url})).body;
|
||||||
"url": url,
|
|
||||||
"headers": {"Referer": url}
|
|
||||||
}));
|
|
||||||
final script = xpath(res, '//script[contains(text(),"sources:")]/text()');
|
final script = xpath(res, '//script[contains(text(),"sources:")]/text()');
|
||||||
if (script.isEmpty) return [];
|
if (script.isEmpty) return [];
|
||||||
final masterUrl =
|
final masterUrl =
|
||||||
substringBefore(substringAfter(script.first, "file:\""), '"');
|
substringBefore(substringAfter(script.first, "file:\""), '"');
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import 'dart:convert';
|
|||||||
class NimeGami extends MProvider {
|
class NimeGami extends MProvider {
|
||||||
NimeGami();
|
NimeGami();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/page/$page"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${source.baseUrl}/page/$page"))).body;
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//div[@class="wrapper-2-a"]/article/a/@href');
|
final urls = xpath(res, '//div[@class="wrapper-2-a"]/article/a/@href');
|
||||||
final names = xpath(res, '//div[@class="wrapper-2-a"]/article/a/@title');
|
final names = xpath(res, '//div[@class="wrapper-2-a"]/article/a/@title');
|
||||||
@@ -26,8 +28,8 @@ class NimeGami extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/page/$page"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${source.baseUrl}/page/$page"))).body;
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//div[@class="post-article"]/article/div/a/@href');
|
final urls = xpath(res, '//div[@class="post-article"]/article/div/a/@href');
|
||||||
final names =
|
final names =
|
||||||
@@ -48,10 +50,9 @@ class NimeGami extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.baseUrl}/page/$page/?s=$query&post_type=post"
|
Uri.parse("${source.baseUrl}/page/$page/?s=$query&post_type=post")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
final urls = xpath(res, '//div[@class="archive-a"]/article/div/a/@href');
|
final urls = xpath(res, '//div[@class="archive-a"]/article/div/a/@href');
|
||||||
final names = xpath(res, '//div[@class="archive-a"]/article/h2/a/@title');
|
final names = xpath(res, '//div[@class="archive-a"]/article/h2/a/@title');
|
||||||
@@ -70,8 +71,7 @@ class NimeGami extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MManga> getDetail(MSource source, String url) async {
|
Future<MManga> getDetail(MSource source, String url) async {
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final description = xpath(res, '//*[@id="Sinopsis"]/p/text()');
|
final description = xpath(res, '//*[@id="Sinopsis"]/p/text()');
|
||||||
if (description.isNotEmpty) {
|
if (description.isNotEmpty) {
|
||||||
@@ -123,14 +123,13 @@ class NimeGami extends MProvider {
|
|||||||
|
|
||||||
Future<List<MVideo>> extractVideos(String quality, String url) async {
|
Future<List<MVideo>> extractVideos(String quality, String url) async {
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
List<MVideo> a = [];
|
|
||||||
if (url.contains("video.nimegami.id")) {
|
if (url.contains("video.nimegami.id")) {
|
||||||
final realUrl = utf8.decode(
|
final realUrl = utf8.decode(
|
||||||
base64Url.decode(substringBefore(substringAfter(url, "url="), "&")));
|
base64Url.decode(substringBefore(substringAfter(url, "url="), "&")));
|
||||||
final a = await extractHXFileVideos(realUrl, quality);
|
final a = await extractHXFileVideos(realUrl, quality);
|
||||||
videos.addAll(a);
|
videos.addAll(a);
|
||||||
} else if (url.contains("berkasdrive") || url.contains("drive.nimegami")) {
|
} else if (url.contains("berkasdrive") || url.contains("drive.nimegami")) {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final source = xpath(res, '//source/@src');
|
final source = xpath(res, '//source/@src');
|
||||||
if (source.isNotEmpty) {
|
if (source.isNotEmpty) {
|
||||||
videos.add(toVideo(source.first, "Berkasdrive - $quality"));
|
videos.add(toVideo(source.first, "Berkasdrive - $quality"));
|
||||||
@@ -147,13 +146,15 @@ class NimeGami extends MProvider {
|
|||||||
if (!url.contains("embed-")) {
|
if (!url.contains("embed-")) {
|
||||||
url = url.replaceAll(".co/", ".co/embed-") + ".html";
|
url = url.replaceAll(".co/", ".co/embed-") + ".html";
|
||||||
}
|
}
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final script = xpath(res,
|
final script = xpath(res,
|
||||||
'//script[contains(text(), "eval") and contains(text(), "p,a,c,k,e,d")]/text()');
|
'//script[contains(text(), "eval") and contains(text(), "p,a,c,k,e,d")]/text()');
|
||||||
if (script.isNotEmpty) {
|
if (script.isNotEmpty) {
|
||||||
final videoUrl = substringBefore(
|
final videoUrl = substringBefore(
|
||||||
substringAfter(substringAfter(unpackJs(script.first), "sources:[", ""),
|
substringAfter(
|
||||||
"file\":\"", ""),
|
substringAfter(unpackJs(script.first), "sources:[", ""),
|
||||||
|
"file\":\"",
|
||||||
|
""),
|
||||||
'"');
|
'"');
|
||||||
if (videoUrl.isNotEmpty) {
|
if (videoUrl.isNotEmpty) {
|
||||||
return [toVideo(videoUrl, "HXFile - $quality")];
|
return [toVideo(videoUrl, "HXFile - $quality")];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get nimegami => _nimegami;
|
Source get nimegami => _nimegami;
|
||||||
const _nimegamiVersion = "0.0.4";
|
const _nimegamiVersion = "0.0.45";
|
||||||
const _nimegamiCodeUrl =
|
const _nimegamiCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/nimegami/nimegami.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/nimegami/nimegami.dart";
|
||||||
Source _nimegami = Source(
|
Source _nimegami = Source(
|
||||||
|
|||||||
@@ -4,31 +4,30 @@ import 'dart:convert';
|
|||||||
class OploVerz extends MProvider {
|
class OploVerz extends MProvider {
|
||||||
OploVerz();
|
OploVerz();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(Uri.parse(
|
||||||
"url": "${source.baseUrl}/anime-list/page/$page/?order=popular"
|
"${source.baseUrl}/anime-list/page/$page/?order=popular")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.baseUrl}/anime-list/page/$page/?order=latest"
|
Uri.parse("${source.baseUrl}/anime-list/page/$page/?order=latest")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.baseUrl}/anime-list/page/$page/?title=$query"
|
Uri.parse("${source.baseUrl}/anime-list/page/$page/?title=$query")))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,8 +36,8 @@ class OploVerz extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"ongoing": 0, "completed": 1}
|
{"ongoing": 0, "completed": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(res, '//*[@class="alternati"]/span[2]/text()');
|
final status = xpath(res, '//*[@class="alternati"]/span[2]/text()');
|
||||||
print(status);
|
print(status);
|
||||||
@@ -70,7 +69,7 @@ class OploVerz extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final dataPost = xpath(res,
|
final dataPost = xpath(res,
|
||||||
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-post')
|
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-post')
|
||||||
.first;
|
.first;
|
||||||
@@ -80,23 +79,21 @@ class OploVerz extends MProvider {
|
|||||||
final dataType = xpath(res,
|
final dataType = xpath(res,
|
||||||
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-type')
|
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-type')
|
||||||
.first;
|
.first;
|
||||||
final body = {
|
|
||||||
"action": "player_ajax",
|
|
||||||
"post": dataPost,
|
|
||||||
"nume": dataNume,
|
|
||||||
"type": dataType
|
|
||||||
};
|
|
||||||
|
|
||||||
final ress = await http(
|
final ress = (await client.post(
|
||||||
'POST',
|
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
|
||||||
json.encode({
|
headers: null,
|
||||||
"useFormBuilder": true,
|
body: {
|
||||||
"body": body,
|
"action": "player_ajax",
|
||||||
"url": "${source.baseUrl}/wp-admin/admin-ajax.php"
|
"post": dataPost,
|
||||||
}));
|
"nume": dataNume,
|
||||||
|
"type": dataType
|
||||||
|
}))
|
||||||
|
.body;
|
||||||
|
|
||||||
final playerLink =
|
final playerLink =
|
||||||
xpath(ress, '//iframe[@class="playeriframe"]/@src').first;
|
xpath(ress, '//iframe[@class="playeriframe"]/@src').first;
|
||||||
final resPlayer = await http('GET', json.encode({"url": playerLink}));
|
final resPlayer = (await client.get(Uri.parse(playerLink))).body;
|
||||||
var resJson = substringBefore(substringAfter(resPlayer, "= "), "<");
|
var resJson = substringBefore(substringAfter(resPlayer, "= "), "<");
|
||||||
var streams = json.decode(resJson)["streams"] as List<Map<String, dynamic>>;
|
var streams = json.decode(resJson)["streams"] as List<Map<String, dynamic>>;
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get oploverz => _oploverz;
|
Source get oploverz => _oploverz;
|
||||||
const _oploverzVersion = "0.0.3";
|
const _oploverzVersion = "0.0.35";
|
||||||
const _oploverzCodeUrl =
|
const _oploverzCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/oploverz/oploverz.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/id/oploverz/oploverz.dart";
|
||||||
Source _oploverz = Source(
|
Source _oploverz = Source(
|
||||||
|
|||||||
@@ -4,25 +4,30 @@ import 'dart:convert';
|
|||||||
class OtakuDesu extends MProvider {
|
class OtakuDesu extends MProvider {
|
||||||
OtakuDesu();
|
OtakuDesu();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/complete-anime/page/$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/complete-anime/page/$page")))
|
||||||
|
.body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/ongoing-anime/page/$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/ongoing-anime/page/$page")))
|
||||||
|
.body;
|
||||||
return parseAnimeList(res);
|
return parseAnimeList(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final data = {"url": "${source.baseUrl}/?s=$query&post_type=anime"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/?s=$query&post_type=anime")))
|
||||||
|
.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()');
|
||||||
@@ -43,8 +48,7 @@ class OtakuDesu extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"Ongoing": 0, "Completed": 1}
|
{"Ongoing": 0, "Completed": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final status = xpath(
|
final status = xpath(
|
||||||
res, '//*[@class="infozingle"]/p[contains(text(), "Status")]/text()');
|
res, '//*[@class="infozingle"]/p[contains(text(), "Status")]/text()');
|
||||||
@@ -83,20 +87,18 @@ class OtakuDesu extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final script =
|
final script =
|
||||||
xpath(res, '//script[contains(text(), "{action:")]/text()').first;
|
xpath(res, '//script[contains(text(), "{action:")]/text()').first;
|
||||||
final nonceAction =
|
final nonceAction =
|
||||||
substringBefore(substringAfter(script, "{action:\""), '"');
|
substringBefore(substringAfter(script, "{action:\""), '"');
|
||||||
final action = substringBefore(substringAfter(script, "action:\""), '"');
|
final action = substringBefore(substringAfter(script, "action:\""), '"');
|
||||||
|
|
||||||
final resNonceAction = await http(
|
final resNonceAction = (await client.post(
|
||||||
'POST',
|
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
|
||||||
json.encode({
|
headers: null,
|
||||||
"useFormBuilder": true,
|
body: {"action": nonceAction}))
|
||||||
"body": {"action": nonceAction},
|
.body;
|
||||||
"url": "${source.baseUrl}/wp-admin/admin-ajax.php"
|
|
||||||
}));
|
|
||||||
final nonce = substringBefore(substringAfter(resNonceAction, ":\""), '"');
|
final nonce = substringBefore(substringAfter(resNonceAction, ":\""), '"');
|
||||||
final mirrorstream =
|
final mirrorstream =
|
||||||
xpath(res, '//*[@class="mirrorstream"]/ul/li/a/@data-content');
|
xpath(res, '//*[@class="mirrorstream"]/ul/li/a/@data-content');
|
||||||
@@ -106,18 +108,21 @@ class OtakuDesu extends MProvider {
|
|||||||
final q = decodedData["q"];
|
final q = decodedData["q"];
|
||||||
final id = decodedData["id"];
|
final id = decodedData["id"];
|
||||||
final i = decodedData["i"];
|
final i = decodedData["i"];
|
||||||
final body = {"i": i, "id": id, "q": q, "nonce": nonce, "action": action};
|
|
||||||
|
|
||||||
final res = await http(
|
final res = (await client.post(
|
||||||
'POST',
|
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
|
||||||
json.encode({
|
headers: null,
|
||||||
"useFormBuilder": true,
|
body: {
|
||||||
"body": body,
|
"i": i,
|
||||||
"url": "${source.baseUrl}/wp-admin/admin-ajax.php"
|
"id": id,
|
||||||
}));
|
"q": q,
|
||||||
|
"nonce": nonce,
|
||||||
|
"action": action
|
||||||
|
}))
|
||||||
|
.body;
|
||||||
final html = utf8.decode(
|
final html = utf8.decode(
|
||||||
base64Url.decode(substringBefore(substringAfter(res, ":\""), '"')));
|
base64Url.decode(substringBefore(substringAfter(res, ":\""), '"')));
|
||||||
final 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="), "&");
|
||||||
@@ -126,7 +131,7 @@ 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 http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).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(
|
||||||
@@ -140,7 +145,7 @@ class OtakuDesu extends MProvider {
|
|||||||
..subtitles = [];
|
..subtitles = [];
|
||||||
videos.add(video);
|
videos.add(video);
|
||||||
} else if (url.contains("mp4upload")) {
|
} else if (url.contains("mp4upload")) {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final script =
|
final script =
|
||||||
xpath(res, '//script[contains(text(), "player.src")]/text()').first;
|
xpath(res, '//script[contains(text(), "player.src")]/text()').first;
|
||||||
final videoUrl =
|
final videoUrl =
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get otakudesu => _otakudesu;
|
Source get otakudesu => _otakudesu;
|
||||||
const _otakudesuVersion = "0.0.35";
|
const _otakudesuVersion = "0.0.4";
|
||||||
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(
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import 'dart:convert';
|
|||||||
class AnimeSaturn extends MProvider {
|
class AnimeSaturn extends MProvider {
|
||||||
AnimeSaturn();
|
AnimeSaturn();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/animeincorso?page=$page"};
|
final res = (await client
|
||||||
final res = await http('GET', json.encode(data));
|
.get(Uri.parse("${source.baseUrl}/animeincorso?page=$page")))
|
||||||
|
.body;
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
|
|
||||||
@@ -32,8 +35,9 @@ class AnimeSaturn extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/newest?page=$page"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${source.baseUrl}/newest?page=$page")))
|
||||||
|
.body;
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
|
|
||||||
@@ -101,8 +105,8 @@ class AnimeSaturn extends MProvider {
|
|||||||
}
|
}
|
||||||
url += "&page=$page";
|
url += "&page=$page";
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
List<MManga> animeList = [];
|
List<MManga> animeList = [];
|
||||||
List<String> urls = [];
|
List<String> urls = [];
|
||||||
@@ -141,8 +145,8 @@ class AnimeSaturn extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"In corso": 0, "Finito": 1}
|
{"In corso": 0, "Finito": 1}
|
||||||
];
|
];
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
MManga anime = MManga();
|
MManga anime = MManga();
|
||||||
final details = xpath(res,
|
final details = xpath(res,
|
||||||
'//div[@class="container shadow rounded bg-dark-as-box mb-3 p-3 w-100 text-white"]/text()')
|
'//div[@class="container shadow rounded bg-dark-as-box mb-3 p-3 w-100 text-white"]/text()')
|
||||||
@@ -189,10 +193,10 @@ class AnimeSaturn extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
final urlVid = xpath(res, '//a[contains(@href,"/watch")]/@href').first;
|
final urlVid = xpath(res, '//a[contains(@href,"/watch")]/@href').first;
|
||||||
final resVid = await http('GET', json.encode({"url": urlVid}));
|
final resVid = (await client.get(Uri.parse(urlVid))).body;
|
||||||
String masterUrl = "";
|
String masterUrl = "";
|
||||||
if (resVid.contains("jwplayer(")) {
|
if (resVid.contains("jwplayer(")) {
|
||||||
masterUrl = substringBefore(substringAfter(resVid, "file: \""), "\"");
|
masterUrl = substringBefore(substringAfter(resVid, "file: \""), "\"");
|
||||||
@@ -202,8 +206,7 @@ class AnimeSaturn extends MProvider {
|
|||||||
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
if (masterUrl.endsWith("playlist.m3u8")) {
|
if (masterUrl.endsWith("playlist.m3u8")) {
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||||
await http('GET', json.encode({"url": masterUrl}));
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get animesaturn => _animesaturn;
|
Source get animesaturn => _animesaturn;
|
||||||
const _animesaturnVersion = "0.0.2";
|
const _animesaturnVersion = "0.0.25";
|
||||||
const _animesaturnCodeUrl =
|
const _animesaturnCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/it/animesaturn/animesaturn.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/it/animesaturn/animesaturn.dart";
|
||||||
Source _animesaturn = Source(
|
Source _animesaturn = Source(
|
||||||
|
|||||||
@@ -3,19 +3,24 @@ import 'dart:convert';
|
|||||||
|
|
||||||
class Filma24 extends MProvider {
|
class Filma24 extends MProvider {
|
||||||
Filma24();
|
Filma24();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
String pageNu = page == 1 ? "" : "/page/$page/";
|
String pageNu = page == 1 ? "" : "/page/$page/";
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}$pageNu"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceBaseUrl(source.id)}$pageNu")))
|
||||||
|
.body;
|
||||||
return animeFromRes(res);
|
return animeFromRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
String pageNu = page == 1 ? "" : "page/$page/";
|
String pageNu = page == 1 ? "" : "page/$page/";
|
||||||
final data = {"url": "${preferenceBaseUrl(source.id)}/$pageNu?sort=trendy"};
|
final res = (await client.get(
|
||||||
final res = await http('GET', json.encode(data));
|
Uri.parse("${preferenceBaseUrl(source.id)}/$pageNu?sort=trendy")))
|
||||||
|
.body;
|
||||||
return animeFromRes(res);
|
return animeFromRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,8 +51,7 @@ class Filma24 extends MProvider {
|
|||||||
|
|
||||||
url += pageNu;
|
url += pageNu;
|
||||||
|
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return animeFromRes(res);
|
return animeFromRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,8 +64,7 @@ class Filma24 extends MProvider {
|
|||||||
episode.url = url;
|
episode.url = url;
|
||||||
episodesList.add(episode);
|
episodesList.add(episode);
|
||||||
} else {
|
} else {
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
final resultElements = document.select("div.row");
|
final resultElements = document.select("div.row");
|
||||||
|
|
||||||
@@ -84,14 +87,12 @@ class Filma24 extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final serverUrls = xpath(res, '//*[@class="player"]/div[1]/a/@href');
|
final serverUrls = xpath(res, '//*[@class="player"]/div[1]/a/@href');
|
||||||
for (var serverUrl in serverUrls) {
|
for (var serverUrl in serverUrls) {
|
||||||
List<MVideo> a = [];
|
List<MVideo> a = [];
|
||||||
final serVdata = {"url": "$url/$serverUrl"};
|
final serVres = (await client.get(Uri.parse("$url/$serverUrl"))).body;
|
||||||
final serVres = await http('GET', json.encode(serVdata));
|
|
||||||
List<String> iframe = xpath(serVres, '//*[@id="plx"]/p/iframe/@src');
|
List<String> iframe = xpath(serVres, '//*[@id="plx"]/p/iframe/@src');
|
||||||
if (iframe.isNotEmpty) {
|
if (iframe.isNotEmpty) {
|
||||||
String i = iframe.first;
|
String i = iframe.first;
|
||||||
@@ -196,15 +197,17 @@ class Filma24 extends MProvider {
|
|||||||
'Referer': 'https://vidmoly.to',
|
'Referer': 'https://vidmoly.to',
|
||||||
};
|
};
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final playListUrlResponse = await http('GET', json.encode({"url": url}));
|
final playListUrlResponse = (await client.get(Uri.parse(url))).body;
|
||||||
final playlistUrl =
|
final playlistUrl =
|
||||||
RegExp(r'file:"(\S+?)"').firstMatch(playListUrlResponse)?.group(1) ??
|
RegExp(r'file:"(\S+?)"').firstMatch(playListUrlResponse)?.group(1) ??
|
||||||
"";
|
"";
|
||||||
final masterPlaylistRes = await http(
|
final masterPlaylistRes =
|
||||||
'GET', json.encode({"url": playlistUrl, "headers": headers}));
|
await client.get(Uri.parse(playlistUrl), headers: headers);
|
||||||
if (masterPlaylistRes != "error") {
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
if (masterPlaylistRes.statusCode == 200) {
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
for (var it
|
||||||
|
in substringAfter(masterPlaylistRes.body, "#EXT-X-STREAM-INF:")
|
||||||
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
|
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
|
||||||
|
|
||||||
@@ -225,12 +228,11 @@ class Filma24 extends MProvider {
|
|||||||
|
|
||||||
Future<List<MVideo>> oneuploadExtractor(String url) async {
|
Future<List<MVideo>> oneuploadExtractor(String url) async {
|
||||||
List<MVideo> videos = [];
|
List<MVideo> videos = [];
|
||||||
final playListUrlResponse = await http('GET', json.encode({"url": url}));
|
final playListUrlResponse = (await client.get(Uri.parse(url))).body;
|
||||||
final playlistUrl =
|
final playlistUrl =
|
||||||
RegExp(r'file:"(\S+?)"').firstMatch(playListUrlResponse)?.group(1) ??
|
RegExp(r'file:"(\S+?)"').firstMatch(playListUrlResponse)?.group(1) ??
|
||||||
"";
|
"";
|
||||||
final masterPlaylistRes =
|
final masterPlaylistRes = (await client.get(Uri.parse(playlistUrl))).body;
|
||||||
await http('GET', json.encode({"url": playlistUrl}));
|
|
||||||
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
for (var it in substringAfter(masterPlaylistRes, "#EXT-X-STREAM-INF:")
|
||||||
.split("#EXT-X-STREAM-INF:")) {
|
.split("#EXT-X-STREAM-INF:")) {
|
||||||
final quality =
|
final quality =
|
||||||
@@ -249,7 +251,7 @@ class Filma24 extends MProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<MVideo>> uqloadExtractor(String url) async {
|
Future<List<MVideo>> uqloadExtractor(String url) async {
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
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) {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get filma24 => _filma24;
|
Source get filma24 => _filma24;
|
||||||
const _filma24Version = "0.0.1";
|
const _filma24Version = "0.0.15";
|
||||||
const _filma24CodeUrl =
|
const _filma24CodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/sq/filma24/filma24.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/anime/src/sq/filma24/filma24.dart";
|
||||||
Source _filma24 = Source(
|
Source _filma24 = Source(
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -4,6 +4,8 @@ import 'dart:convert';
|
|||||||
class HeanCms extends MProvider {
|
class HeanCms extends MProvider {
|
||||||
HeanCms();
|
HeanCms();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
@@ -18,14 +20,13 @@ class HeanCms extends MProvider {
|
|||||||
"series_status": "Ongoing",
|
"series_status": "Ongoing",
|
||||||
"series_type": "Comic"
|
"series_type": "Comic"
|
||||||
};
|
};
|
||||||
final data = {"url": url, "headers": headers, "body": body};
|
res = (await client.post(Uri.parse(url), headers: headers, body: body))
|
||||||
res = await http('POST', json.encode(data));
|
.body;
|
||||||
} else {
|
} else {
|
||||||
final newEndpointUrl =
|
final newEndpointUrl =
|
||||||
"${source.apiUrl}/query/?page=$page&query_string=&series_status=All&order=desc&orderBy=total_views&perPage=12&tags_ids=[]&series_type=Comic";
|
"${source.apiUrl}/query/?page=$page&query_string=&series_status=All&order=desc&orderBy=total_views&perPage=12&tags_ids=[]&series_type=Comic";
|
||||||
|
res =
|
||||||
final newEndpointData = {"url": newEndpointUrl, "headers": headers};
|
(await client.get(Uri.parse(newEndpointUrl), headers: headers)).body;
|
||||||
res = await http('GET', json.encode(newEndpointData));
|
|
||||||
}
|
}
|
||||||
return mMangaRes(res, source);
|
return mMangaRes(res, source);
|
||||||
}
|
}
|
||||||
@@ -43,14 +44,13 @@ class HeanCms extends MProvider {
|
|||||||
"series_status": "Ongoing",
|
"series_status": "Ongoing",
|
||||||
"series_type": "Comic"
|
"series_type": "Comic"
|
||||||
};
|
};
|
||||||
final data = {"url": url, "headers": headers, "body": body};
|
res = (await client.post(Uri.parse(url), headers: headers, body: body))
|
||||||
res = await http('POST', json.encode(data));
|
.body;
|
||||||
} else {
|
} else {
|
||||||
final newEndpointUrl =
|
final newEndpointUrl =
|
||||||
"${source.apiUrl}/query/?page=$page&query_string=&series_status=All&order=desc&orderBy=latest&perPage=12&tags_ids=[]&series_type=Comic";
|
"${source.apiUrl}/query/?page=$page&query_string=&series_status=All&order=desc&orderBy=latest&perPage=12&tags_ids=[]&series_type=Comic";
|
||||||
|
res =
|
||||||
final newEndpointData = {"url": newEndpointUrl, "headers": headers};
|
(await client.get(Uri.parse(newEndpointUrl), headers: headers)).body;
|
||||||
res = await http('GET', json.encode(newEndpointData));
|
|
||||||
}
|
}
|
||||||
return mMangaRes(res, source);
|
return mMangaRes(res, source);
|
||||||
}
|
}
|
||||||
@@ -63,14 +63,13 @@ class HeanCms extends MProvider {
|
|||||||
if (!useNewQueryEndpoint(source.source)) {
|
if (!useNewQueryEndpoint(source.source)) {
|
||||||
final url = "${source.apiUrl}/series/search";
|
final url = "${source.apiUrl}/series/search";
|
||||||
final body = {"term": query};
|
final body = {"term": query};
|
||||||
final data = {"url": url, "headers": headers, "body": body};
|
res = (await client.post(Uri.parse(url), headers: headers, body: body))
|
||||||
res = await http('POST', json.encode(data));
|
.body;
|
||||||
} else {
|
} else {
|
||||||
final newEndpointUrl =
|
final newEndpointUrl =
|
||||||
"${source.apiUrl}/query/?page=$page&query_string=$query&series_status=All&order=desc&orderBy=total_views&perPage=12&tags_ids=[]&series_type=Comic";
|
"${source.apiUrl}/query/?page=$page&query_string=$query&series_status=All&order=desc&orderBy=total_views&perPage=12&tags_ids=[]&series_type=Comic";
|
||||||
|
res =
|
||||||
final newEndpointData = {"url": newEndpointUrl, "headers": headers};
|
(await client.get(Uri.parse(newEndpointUrl), headers: headers)).body;
|
||||||
res = await http('GET', json.encode(newEndpointData));
|
|
||||||
}
|
}
|
||||||
return mMangaRes(res, source);
|
return mMangaRes(res, source);
|
||||||
}
|
}
|
||||||
@@ -80,11 +79,10 @@ class HeanCms extends MProvider {
|
|||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
String currentSlug = substringAfterLast(url, "/");
|
String currentSlug = substringAfterLast(url, "/");
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
final data = {
|
final res = (await client.get(
|
||||||
"url": "${source.apiUrl}/series/$currentSlug",
|
Uri.parse("${source.apiUrl}/series/$currentSlug"),
|
||||||
"headers": headers
|
headers: headers))
|
||||||
};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
manga.author = getMapValue(res, "author");
|
manga.author = getMapValue(res, "author");
|
||||||
manga.description = getMapValue(res, "description");
|
manga.description = getMapValue(res, "description");
|
||||||
manga.genre = jsonPathToString(res, r"$.tags[*].name", "._").split("._");
|
manga.genre = jsonPathToString(res, r"$.tags[*].name", "._").split("._");
|
||||||
@@ -138,14 +136,14 @@ class HeanCms extends MProvider {
|
|||||||
String res = "".toString();
|
String res = "".toString();
|
||||||
if (!useslugStrategy(source.name)) {
|
if (!useslugStrategy(source.name)) {
|
||||||
String chapterId = substringAfter(url, '#');
|
String chapterId = substringAfter(url, '#');
|
||||||
final data = {
|
res = (await client.get(
|
||||||
"url": "${source.apiUrl}/series/chapter/$chapterId",
|
Uri.parse("${source.apiUrl}/series/chapter/$chapterId"),
|
||||||
"headers": headers
|
headers: headers))
|
||||||
};
|
.body;
|
||||||
res = await http('GET', json.encode(data));
|
|
||||||
} else {
|
} else {
|
||||||
final data = {"url": "${source.baseUrl}$url", "headers": headers};
|
res = (await client.get(Uri.parse("${source.baseUrl}$url"),
|
||||||
res = await http('GET', json.encode(data));
|
headers: headers))
|
||||||
|
.body;
|
||||||
|
|
||||||
List<String> pageUrls = [];
|
List<String> pageUrls = [];
|
||||||
var imagesRes = parseHtml(res)
|
var imagesRes = parseHtml(res)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'src/yugenmangas/yugenmangas.dart';
|
|||||||
import 'src/omegascans/omegascans.dart';
|
import 'src/omegascans/omegascans.dart';
|
||||||
import 'src/perfscan/perfscan.dart';
|
import 'src/perfscan/perfscan.dart';
|
||||||
|
|
||||||
const heancmsVersion = "0.0.5";
|
const heancmsVersion = "0.0.55";
|
||||||
const heancmsSourceCodeUrl =
|
const heancmsSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/heancms/heancms.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/heancms/heancms.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,20 +4,22 @@ import 'dart:convert';
|
|||||||
class Madara extends MProvider {
|
class Madara extends MProvider {
|
||||||
Madara();
|
Madara();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url = "${source.baseUrl}/manga/page/$page/?m_orderby=views";
|
final res = (await client.get(
|
||||||
final data = {"url": url, "sourceId": source.id};
|
Uri.parse("${source.baseUrl}/manga/page/$page/?m_orderby=views")))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return mangaFromElements(document.select("div.page-item-detail"));
|
return mangaFromElements(document.select("div.page-item-detail"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url = "${source.baseUrl}/manga/page/$page/?m_orderby=latest";
|
final res = (await client.get(
|
||||||
final data = {"url": url, "sourceId": source.id};
|
Uri.parse("${source.baseUrl}/manga/page/$page/?m_orderby=latest")))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return mangaFromElements(document.select("div.page-item-detail"));
|
return mangaFromElements(document.select("div.page-item-detail"));
|
||||||
}
|
}
|
||||||
@@ -68,8 +70,8 @@ class Madara extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url, "sourceId": source.id};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
return mangaFromElements(document.select("div.c-tabs-item__content"));
|
return mangaFromElements(document.select("div.c-tabs-item__content"));
|
||||||
}
|
}
|
||||||
@@ -122,8 +124,7 @@ class Madara extends MProvider {
|
|||||||
];
|
];
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
String res = "";
|
String res = "";
|
||||||
final datas = {"url": url, "sourceId": source.id};
|
res = (await client.get(Uri.parse(url))).body;
|
||||||
res = await http('GET', json.encode(datas));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
manga.author = document.selectFirst("div.author-content > a")?.text ?? "";
|
manga.author = document.selectFirst("div.author-content > a")?.text ?? "";
|
||||||
|
|
||||||
@@ -162,14 +163,17 @@ class Madara extends MProvider {
|
|||||||
"Content-Type": "application/x-www-form-urlencoded",
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
"X-Requested-With": "XMLHttpRequest"
|
"X-Requested-With": "XMLHttpRequest"
|
||||||
};
|
};
|
||||||
final urll =
|
|
||||||
"${baseUrl}wp-admin/admin-ajax.php?action=manga_get_chapters&manga=$mangaId";
|
final resP = await client.post(
|
||||||
final datasP = {"url": urll, "headers": headers, "sourceId": source.id};
|
Uri.parse(
|
||||||
res = await http('POST', json.encode(datasP));
|
"${baseUrl}wp-admin/admin-ajax.php?action=manga_get_chapters&manga=$mangaId"),
|
||||||
if (res == "error" || mangaId.isEmpty) {
|
headers: headers);
|
||||||
final urlP = "${url}ajax/chapters";
|
if (resP != 200 || mangaId.isEmpty) {
|
||||||
final datasP = {"url": urlP, "headers": headers, "sourceId": source.id};
|
res = (await client.post(Uri.parse("${url}ajax/chapters"),
|
||||||
res = await http('POST', json.encode(datasP));
|
headers: headers))
|
||||||
|
.body;
|
||||||
|
} else {
|
||||||
|
res = resP.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
var chapUrls = xpath(res, '//li[@class^="wp-manga-chapter"]/a/@href');
|
var chapUrls = xpath(res, '//li[@class^="wp-manga-chapter"]/a/@href');
|
||||||
@@ -222,8 +226,7 @@ class Madara extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final datas = {"url": url, "sourceId": source.id};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
final document = parseHtml(res);
|
final document = parseHtml(res);
|
||||||
final pageElement = document.selectFirst(
|
final pageElement = document.selectFirst(
|
||||||
"div.page-break, li.blocks-gallery-item, .reading-content, .text-left img");
|
"div.page-break, li.blocks-gallery-item, .reading-content, .text-left img");
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ import 'src/comicarab/comicarab.dart';
|
|||||||
import 'src/manga3asq/manga3asq.dart';
|
import 'src/manga3asq/manga3asq.dart';
|
||||||
import 'src/bakamh/bakamh.dart';
|
import 'src/bakamh/bakamh.dart';
|
||||||
|
|
||||||
const madaraVersion = "0.0.6";
|
const madaraVersion = "0.0.65";
|
||||||
const madaraSourceCodeUrl =
|
const madaraSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/madara/madara.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/madara/madara.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,21 +4,21 @@ import 'dart:convert';
|
|||||||
class MangaBox extends MProvider {
|
class MangaBox extends MProvider {
|
||||||
MangaBox();
|
MangaBox();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url = "${source.baseUrl}/${popularUrlPath(source.name, page)}";
|
final res = (await client.get(Uri.parse(
|
||||||
final data = {"url": url};
|
"${source.baseUrl}/${popularUrlPath(source.name, page)}")))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
|
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url = "${source.baseUrl}/${latestUrlPath(source.name, page)}";
|
final res = (await client.get(
|
||||||
final data = {"url": url, "sourceId": source.id};
|
Uri.parse("${source.baseUrl}/${latestUrlPath(source.name, page)}")))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
|
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,8 +84,8 @@ class MangaBox extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
List<String> urls = [];
|
List<String> urls = [];
|
||||||
@@ -125,8 +125,7 @@ class MangaBox extends MProvider {
|
|||||||
{"Ongoing": 0, "Completed": 1}
|
{"Ongoing": 0, "Completed": 1}
|
||||||
];
|
];
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
final datas = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
|
|
||||||
List<String> author = xpath(res,
|
List<String> author = xpath(res,
|
||||||
'//*[@class="table-label" and contains(text(), "Author")]/parent::tr/td[2]/text()');
|
'//*[@class="table-label" and contains(text(), "Author")]/parent::tr/td[2]/text()');
|
||||||
@@ -204,8 +203,7 @@ class MangaBox extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final datas = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
List<String> pageUrls = [];
|
List<String> pageUrls = [];
|
||||||
final urls = xpath(res,
|
final urls = xpath(res,
|
||||||
'//div[@class="container-chapter-reader" or @class="panel-read-story"]/img/@src');
|
'//div[@class="container-chapter-reader" or @class="panel-read-story"]/img/@src');
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import 'src/mangairo/mangaeiro.dart';
|
|||||||
import 'src/mangakakalot/mangakakalot.dart';
|
import 'src/mangakakalot/mangakakalot.dart';
|
||||||
import 'src/manganato/manganato.dart';
|
import 'src/manganato/manganato.dart';
|
||||||
|
|
||||||
const mangaboxVersion = "0.0.15";
|
const mangaboxVersion = "0.0.2";
|
||||||
const mangaboxSourceCodeUrl =
|
const mangaboxSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mangabox/mangabox.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mangabox/mangabox.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,23 +4,21 @@ import 'dart:convert';
|
|||||||
class MangaReader extends MProvider {
|
class MangaReader extends MProvider {
|
||||||
MangaReader();
|
MangaReader();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
"${source.baseUrl}${getMangaUrlDirectory(source.name)}/?page=$page&order=popular";
|
"${source.baseUrl}${getMangaUrlDirectory(source.name)}/?page=$page&order=popular")))
|
||||||
final data = {"url": url, "sourceId": source.id};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
"${source.baseUrl}${getMangaUrlDirectory(source.name)}/?page=$page&order=update";
|
"${source.baseUrl}${getMangaUrlDirectory(source.name)}/?page=$page&order=update")))
|
||||||
final data = {"url": url, "sourceId": source.id};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,9 +66,7 @@ class MangaReader extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final data = {"url": url, "sourceId": source.id};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,9 +125,8 @@ class MangaReader extends MProvider {
|
|||||||
];
|
];
|
||||||
url = getUrlWithoutDomain(url);
|
url = getUrlWithoutDomain(url);
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
final datas = {"url": "${source.baseUrl}$url", "sourceId": source.id};
|
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
|
|
||||||
|
final res = (await client.get(Uri.parse("${source.baseUrl}$url"))).body;
|
||||||
List<String> author = xpath(
|
List<String> author = xpath(
|
||||||
res,
|
res,
|
||||||
"//table[contains(@class, 'infotable')]//tr[contains(text(), 'Author')]/td[last()]/text() | //div[contains(@class, 'tsinfo')]//div[contains(@class, 'imptdt') and contains(text(), 'Author')]//i/text() | //div[contains(@class, 'fmed')]//b[contains(text(), 'Author')]/following-sibling::span[1]/text() | //span[contains(text(), 'Author')]/text()",
|
"//table[contains(@class, 'infotable')]//tr[contains(text(), 'Author')]/td[last()]/text() | //div[contains(@class, 'tsinfo')]//div[contains(@class, 'imptdt') and contains(text(), 'Author')]//i/text() | //div[contains(@class, 'fmed')]//b[contains(text(), 'Author')]/following-sibling::span[1]/text() | //span[contains(text(), 'Author')]/text()",
|
||||||
@@ -195,8 +190,7 @@ class MangaReader extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
url = getUrlWithoutDomain(url);
|
url = getUrlWithoutDomain(url);
|
||||||
final datas = {"url": '${source.baseUrl}$url', "sourceId": source.id};
|
final res = (await client.get(Uri.parse('${source.baseUrl}$url'))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
|
|
||||||
List<String> pages = [];
|
List<String> pages = [];
|
||||||
List<String> pagesUrl = [];
|
List<String> pagesUrl = [];
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import 'src/turktoon/turktoon.dart';
|
|||||||
import 'src/uzaymanga/uzaymanga.dart';
|
import 'src/uzaymanga/uzaymanga.dart';
|
||||||
import 'src/xcalibrscans/xcalibrscans.dart';
|
import 'src/xcalibrscans/xcalibrscans.dart';
|
||||||
|
|
||||||
const mangareaderVersion = "0.0.75";
|
const mangareaderVersion = "0.0.8";
|
||||||
const mangareaderSourceCodeUrl =
|
const mangareaderSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mangareader/mangareader.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mangareader/mangareader.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ import 'dart:convert';
|
|||||||
class MMRCMS extends MProvider {
|
class MMRCMS extends MProvider {
|
||||||
MMRCMS();
|
MMRCMS();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
"${source.baseUrl}/filterList?page=$page&sortBy=views&asc=false";
|
"${source.baseUrl}/filterList?page=$page&sortBy=views&asc=false")))
|
||||||
final data = {"url": url, "sourceId": source.id};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
final urls = xpath(res, '//*[ @class="chart-title"]/@href');
|
final urls = xpath(res, '//*[ @class="chart-title"]/@href');
|
||||||
@@ -38,9 +39,9 @@ class MMRCMS extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url = "${source.baseUrl}/latest-release?page=$page";
|
final res = (await client
|
||||||
final data = {"url": url, "sourceId": source.id};
|
.get(Uri.parse("${source.baseUrl}/latest-release?page=$page")))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
final urls = xpath(res, '//*[@class="manga-item"]/h3/a/@href');
|
final urls = xpath(res, '//*[@class="manga-item"]/h3/a/@href');
|
||||||
@@ -96,8 +97,8 @@ class MMRCMS extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final data = {"url": url, "sourceId": source.id};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
|
|
||||||
@@ -170,8 +171,7 @@ class MMRCMS extends MProvider {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
final datas = {"url": url, "sourceId": source.id};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
|
|
||||||
final author = xpath(res,
|
final author = xpath(res,
|
||||||
'//*[@class="dl-horizontal"]/dt[contains(text(), "Auteur(s)") or contains(text(), "Author(s)") or contains(text(), "Autor(es)") or contains(text(), "Yazar(lar) or contains(text(), "Mangaka(lar)")]//following-sibling::dd[1]/text()');
|
'//*[@class="dl-horizontal"]/dt[contains(text(), "Auteur(s)") or contains(text(), "Author(s)") or contains(text(), "Autor(es)") or contains(text(), "Yazar(lar) or contains(text(), "Mangaka(lar)")]//following-sibling::dd[1]/text()');
|
||||||
@@ -215,8 +215,7 @@ class MMRCMS extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final datas = {"url": url, "sourceId": source.id};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
|
|
||||||
List<String> pagesUrl = [];
|
List<String> pagesUrl = [];
|
||||||
final pages =
|
final pages =
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import 'src/readcomicsonline/readcomicsonline.dart';
|
|||||||
import 'src/lelscanvf/lelscanvf.dart';
|
import 'src/lelscanvf/lelscanvf.dart';
|
||||||
import 'src/mangafr/mangafr.dart';
|
import 'src/mangafr/mangafr.dart';
|
||||||
|
|
||||||
const mmrcmsVersion = "0.0.5";
|
const mmrcmsVersion = "0.0.55";
|
||||||
const mmrcmsSourceCodeUrl =
|
const mmrcmsSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mmrcms/mmrcms.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/mmrcms/mmrcms.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import 'dart:convert';
|
|||||||
class NepNep extends MProvider {
|
class NepNep extends MProvider {
|
||||||
NepNep();
|
NepNep();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/search/"};
|
final res = (await client.get(Uri.parse("${source.baseUrl}/search/"))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
final directory = directoryFromDocument(res);
|
final directory = directoryFromDocument(res);
|
||||||
final resSort = sortMapList(json.decode(directory), "vm", 1);
|
final resSort = sortMapList(json.decode(directory), "vm", 1);
|
||||||
|
|
||||||
@@ -17,9 +17,7 @@ class NepNep extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final data = {"url": "${source.baseUrl}/search/"};
|
final res = (await client.get(Uri.parse("${source.baseUrl}/search/"))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
final directory = directoryFromDocument(res);
|
final directory = directoryFromDocument(res);
|
||||||
final resSort = sortMapList(json.decode(directory), "lt", 1);
|
final resSort = sortMapList(json.decode(directory), "lt", 1);
|
||||||
|
|
||||||
@@ -31,8 +29,7 @@ class NepNep extends MProvider {
|
|||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final filters = filterList.filters;
|
final filters = filterList.filters;
|
||||||
List<dynamic> queryRes = [];
|
List<dynamic> queryRes = [];
|
||||||
final data = {"url": "${source.baseUrl}/search/"};
|
final res = (await client.get(Uri.parse("${source.baseUrl}/search/"))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
|
|
||||||
final directory = directoryFromDocument(res);
|
final directory = directoryFromDocument(res);
|
||||||
final resSort = sortMapList(json.decode(directory), "lt", 1);
|
final resSort = sortMapList(json.decode(directory), "lt", 1);
|
||||||
@@ -145,8 +142,9 @@ class NepNep extends MProvider {
|
|||||||
{"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2}
|
{"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2}
|
||||||
];
|
];
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
final data = {"url": '${source.baseUrl}/manga/$url', "headers": headers};
|
final res = (await client.get(Uri.parse('${source.baseUrl}/manga/$url'),
|
||||||
final res = await http('GET', json.encode(data));
|
headers: headers))
|
||||||
|
.body;
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
manga.author = xpath(res,
|
manga.author = xpath(res,
|
||||||
'//li[contains(@class,"list-group-item") and contains(text(),"Author")]/a/text()')
|
'//li[contains(@class,"list-group-item") and contains(text(),"Author")]/a/text()')
|
||||||
@@ -194,9 +192,9 @@ class NepNep extends MProvider {
|
|||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
List<String> pages = [];
|
List<String> pages = [];
|
||||||
final data = {"url": '${source.baseUrl}$url', "headers": headers};
|
final res =
|
||||||
print(data);
|
(await client.get(Uri.parse('${source.baseUrl}$url'), headers: headers))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
final script =
|
final script =
|
||||||
xpath(res, '//script[contains(text(), "MainFunction")]/text()').first;
|
xpath(res, '//script[contains(text(), "MainFunction")]/text()').first;
|
||||||
final chapScript =
|
final chapScript =
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import '../../../model/source.dart';
|
|||||||
import 'src/mangasee/mangasee.dart';
|
import 'src/mangasee/mangasee.dart';
|
||||||
import 'src/mangalife/mangalife.dart';
|
import 'src/mangalife/mangalife.dart';
|
||||||
|
|
||||||
const nepnepVersion = "0.0.5";
|
const nepnepVersion = "0.0.55";
|
||||||
const nepnepSourceCodeUrl =
|
const nepnepSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/nepnep/nepnep.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/multisrc/nepnep/nepnep.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,21 +4,21 @@ import 'dart:convert';
|
|||||||
class Batoto extends MProvider {
|
class Batoto extends MProvider {
|
||||||
Batoto();
|
Batoto();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
"${preferenceMirror(source.id)}/browse?${lang(source.lang)}&sort=views_a&page=$page";
|
"${preferenceMirror(source.id)}/browse?${lang(source.lang)}&sort=views_a&page=$page")))
|
||||||
final data = {"url": url};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return mangaElementM(res, source);
|
return mangaElementM(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(Uri.parse(
|
||||||
"${preferenceMirror(source.id)}/browse?${lang(source.lang)}&sort=update&page=$page";
|
"${preferenceMirror(source.id)}/browse?${lang(source.lang)}&sort=update&page=$page")))
|
||||||
final data = {"url": url};
|
.body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return mangaElementM(res, source);
|
return mangaElementM(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,9 +52,7 @@ class Batoto extends MProvider {
|
|||||||
}
|
}
|
||||||
url += "${source.lang}";
|
url += "${source.lang}";
|
||||||
}
|
}
|
||||||
}
|
} else if (filter.type == "GenreGroupFilter") {
|
||||||
//
|
|
||||||
else if (filter.type == "GenreGroupFilter") {
|
|
||||||
final included = (filter.state as List)
|
final included = (filter.state as List)
|
||||||
.where((e) => e.state == 1 ? true : false)
|
.where((e) => e.state == 1 ? true : false)
|
||||||
.toList();
|
.toList();
|
||||||
@@ -100,8 +98,7 @@ class Batoto extends MProvider {
|
|||||||
url += "${ll(url)}chapters=$min-$max";
|
url += "${ll(url)}chapters=$min-$max";
|
||||||
}
|
}
|
||||||
|
|
||||||
final data = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
return mangaElementM(res, source);
|
return mangaElementM(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,8 +108,9 @@ class Batoto extends MProvider {
|
|||||||
{"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2}
|
{"Ongoing": 0, "Completed": 1, "Cancelled": 3, "Hiatus": 2}
|
||||||
];
|
];
|
||||||
|
|
||||||
final data = {"url": "${preferenceMirror(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(data));
|
(await client.get(Uri.parse("${preferenceMirror(source.id)}$url")))
|
||||||
|
.body;
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
final workStatus = xpath(res,
|
final workStatus = xpath(res,
|
||||||
'//*[@class="attr-item"]/b[contains(text(),"Original work")]/following-sibling::span[1]/text()')
|
'//*[@class="attr-item"]/b[contains(text(),"Original work")]/following-sibling::span[1]/text()')
|
||||||
@@ -164,9 +162,9 @@ class Batoto extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final datas = {"url": "${preferenceMirror(source.id)}$url"};
|
final res =
|
||||||
final res = await http('GET', json.encode(datas));
|
(await client.get(Uri.parse("${preferenceMirror(source.id)}$url")))
|
||||||
|
.body;
|
||||||
final script = xpath(res,
|
final script = xpath(res,
|
||||||
'//script[contains(text(), "imgHttpLis") and contains(text(), "batoWord") and contains(text(), "batoPass")]/text()')
|
'//script[contains(text(), "imgHttpLis") and contains(text(), "batoWord") and contains(text(), "batoPass")]/text()')
|
||||||
.first;
|
.first;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
const _batotoVersion = "0.0.55";
|
const _batotoVersion = "0.0.6";
|
||||||
const _batotoSourceCodeUrl =
|
const _batotoSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/batoto/batoto.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/batoto/batoto.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,21 +4,25 @@ import 'dart:convert';
|
|||||||
class ComickFun extends MProvider {
|
class ComickFun extends MProvider {
|
||||||
ComickFun();
|
ComickFun();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(
|
||||||
"${source.apiUrl}/v1.0/search?sort=follow&page=$page&tachiyomi=true";
|
Uri.parse(
|
||||||
final data = {"url": url, "headers": getHeader(source.baseUrl)};
|
"${source.apiUrl}/v1.0/search?sort=follow&page=$page&tachiyomi=true"),
|
||||||
final res = await http('GET', json.encode(data));
|
headers: getHeader(source.baseUrl)))
|
||||||
|
.body;
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final url =
|
final res = (await client.get(
|
||||||
"${source.apiUrl}/v1.0/search?sort=uploaded&page=$page&tachiyomi=true";
|
Uri.parse(
|
||||||
final data = {"url": url, "headers": getHeader(source.baseUrl)};
|
"${source.apiUrl}/v1.0/search?sort=uploaded&page=$page&tachiyomi=true"),
|
||||||
final res = await http('GET', json.encode(data));
|
headers: getHeader(source.baseUrl)))
|
||||||
|
.body;
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,8 +104,10 @@ class ComickFun extends MProvider {
|
|||||||
}
|
}
|
||||||
url += "${ll(url)}page=$page&tachiyomi=true";
|
url += "${ll(url)}page=$page&tachiyomi=true";
|
||||||
}
|
}
|
||||||
final data = {"url": url, "headers": getHeader(source.baseUrl)};
|
|
||||||
final res = await http('GET', json.encode(data));
|
final res =
|
||||||
|
(await client.get(Uri.parse(url), headers: getHeader(source.baseUrl)))
|
||||||
|
.body;
|
||||||
return mangaRes(res);
|
return mangaRes(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,12 +116,12 @@ class ComickFun extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"1": 0, "2": 1, "3": 3, "4": 2}
|
{"1": 0, "2": 1, "3": 3, "4": 2}
|
||||||
];
|
];
|
||||||
|
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
|
final res = (await client.get(
|
||||||
final urll = "${source.apiUrl}${url.replaceAll("#", '')}?tachiyomi=true";
|
Uri.parse(
|
||||||
final data = {"url": urll, "headers": headers};
|
"${source.apiUrl}${url.replaceAll("#", '')}?tachiyomi=true"),
|
||||||
final res = await http('GET', json.encode(data));
|
headers: headers))
|
||||||
|
.body;
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
manga.author = jsonPathToString(res, r'$.authors[*].name', '');
|
manga.author = jsonPathToString(res, r'$.authors[*].name', '');
|
||||||
manga.genre = jsonPathToString(res, r'$.genres[*].name', "_.").split("_.");
|
manga.genre = jsonPathToString(res, r'$.genres[*].name', "_.").split("_.");
|
||||||
@@ -124,15 +130,15 @@ class ComickFun extends MProvider {
|
|||||||
parseStatus(jsonPathToString(res, r'$..comic.status', ''), statusList);
|
parseStatus(jsonPathToString(res, r'$..comic.status', ''), statusList);
|
||||||
final chapUrlReq =
|
final chapUrlReq =
|
||||||
"${source.apiUrl}${url.replaceAll("#", '')}chapters?lang=${source.lang}&tachiyomi=true&page=1";
|
"${source.apiUrl}${url.replaceAll("#", '')}chapters?lang=${source.lang}&tachiyomi=true&page=1";
|
||||||
final dataReq = {"url": chapUrlReq, "headers": headers};
|
final request =
|
||||||
final request = await http('GET', json.encode(dataReq));
|
(await client.get(Uri.parse(chapUrlReq), headers: headers)).body;
|
||||||
var total = jsonPathToString(request, r'$.total', '');
|
var total = jsonPathToString(request, r'$.total', '');
|
||||||
final chapterLimit = int.parse(total);
|
final chapterLimit = int.parse(total);
|
||||||
final newChapUrlReq =
|
final newChapUrlReq =
|
||||||
"${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${source.lang}&tachiyomi=true&page=1";
|
"${source.apiUrl}${url.replaceAll("#", '')}chapters?limit=$chapterLimit&lang=${source.lang}&tachiyomi=true&page=1";
|
||||||
|
|
||||||
final newDataReq = {"url": newChapUrlReq, "headers": headers};
|
final newRequest =
|
||||||
final newRequest = await http('GET', json.encode(newDataReq));
|
(await client.get(Uri.parse(newChapUrlReq), headers: headers)).body;
|
||||||
|
|
||||||
final chapsUrls =
|
final chapsUrls =
|
||||||
jsonPathToString(newRequest, r'$.chapters[*].hid', "_.").split("_.");
|
jsonPathToString(newRequest, r'$.chapters[*].hid', "_.").split("_.");
|
||||||
@@ -180,9 +186,10 @@ class ComickFun extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final urll = "${source.apiUrl}/chapter/$url?tachiyomi=true";
|
final res = (await client.get(
|
||||||
final data = {"url": urll, "headers": getHeader(url)};
|
Uri.parse("${source.apiUrl}/chapter/$url?tachiyomi=true"),
|
||||||
final res = await http('GET', json.encode(data));
|
headers: getHeader(url)))
|
||||||
|
.body;
|
||||||
return jsonPathToString(res, r'$.chapter.images[*].url', '_.').split('_.');
|
return jsonPathToString(res, r'$.chapter.images[*].url', '_.').split('_.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
const _comickVersion = "0.0.5";
|
const _comickVersion = "0.0.55";
|
||||||
const _comickSourceCodeUrl =
|
const _comickSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/comick/comick.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/comick/comick.dart";
|
||||||
|
|
||||||
|
|||||||
@@ -4,23 +4,23 @@ import 'dart:convert';
|
|||||||
class MangaDex extends MProvider {
|
class MangaDex extends MProvider {
|
||||||
MangaDex();
|
MangaDex();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
page = (20 * (page - 1));
|
page = (20 * (page - 1));
|
||||||
final url =
|
final url =
|
||||||
"https://api.mangadex.org/manga?limit=20&offset=$page&availableTranslatedLanguage[]=${source.lang}&includes[]=cover_art${preferenceContentRating(source.id)}${preferenceOriginalLanguages(source.id)}&order[followedCount]=desc";
|
"https://api.mangadex.org/manga?limit=20&offset=$page&availableTranslatedLanguage[]=${source.lang}&includes[]=cover_art${preferenceContentRating(source.id)}${preferenceOriginalLanguages(source.id)}&order[followedCount]=desc";
|
||||||
final datas = {"url": url};
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
final res = await http('GET', json.encode(datas));
|
|
||||||
return mangaRes(res, source);
|
return mangaRes(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
page = (20 * (page - 1));
|
page = (20 * (page - 1));
|
||||||
final urll =
|
final url =
|
||||||
"https://api.mangadex.org/chapter?limit=20&offset=$page&translatedLanguage[]=${source.lang}&includeFutureUpdates=0&order[publishAt]=desc&includeFuturePublishAt=0&includeEmptyPages=0";
|
"https://api.mangadex.org/chapter?limit=20&offset=$page&translatedLanguage[]=${source.lang}&includeFutureUpdates=0&order[publishAt]=desc&includeFuturePublishAt=0&includeEmptyPages=0";
|
||||||
final datas = {"url": urll};
|
final ress = (await client.get(Uri.parse(url))).body;
|
||||||
final ress = await http('GET', json.encode(datas));
|
|
||||||
final mangaIds =
|
final mangaIds =
|
||||||
jsonPathToString(ress, r'$.data[*].relationships[*].id', '.--')
|
jsonPathToString(ress, r'$.data[*].relationships[*].id', '.--')
|
||||||
.split('.--');
|
.split('.--');
|
||||||
@@ -30,7 +30,7 @@ class MangaDex extends MProvider {
|
|||||||
}
|
}
|
||||||
final newUrl =
|
final newUrl =
|
||||||
"https://api.mangadex.org/manga?includes[]=cover_art&limit=${mangaIds.length}${preferenceContentRating(source.id)}${preferenceOriginalLanguages(source.id)}$mangaIdss";
|
"https://api.mangadex.org/manga?includes[]=cover_art&limit=${mangaIds.length}${preferenceContentRating(source.id)}${preferenceOriginalLanguages(source.id)}$mangaIdss";
|
||||||
final res = await http('GET', json.encode({"url": newUrl}));
|
final res = (await client.get(Uri.parse(newUrl))).body;
|
||||||
return mangaRes(res, source);
|
return mangaRes(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ class MangaDex extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
return mangaRes(res, source);
|
return mangaRes(res, source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,9 +149,9 @@ class MangaDex extends MProvider {
|
|||||||
{"ongoing": 0, "completed": 1, "hiatus": 2, "cancelled": 3}
|
{"ongoing": 0, "completed": 1, "hiatus": 2, "cancelled": 3}
|
||||||
];
|
];
|
||||||
|
|
||||||
final urll =
|
final res = (await client.get(Uri.parse(
|
||||||
"https://api.mangadex.org$url?includes[]=cover_art&includes[]=author&includes[]=artist";
|
"https://api.mangadex.org$url?includes[]=cover_art&includes[]=author&includes[]=artist")))
|
||||||
final res = await http('GET', json.encode({"url": urll}));
|
.body;
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
manga.author = jsonPathToString(
|
manga.author = jsonPathToString(
|
||||||
res, r'$..data.relationships[*].attributes.name', ', ');
|
res, r'$..data.relationships[*].attributes.name', ', ');
|
||||||
@@ -223,11 +223,10 @@ class MangaDex extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final urll = "https://api.mangadex.org/at-home/server/$url";
|
final res = (await client
|
||||||
|
.get(Uri.parse("https://api.mangadex.org/at-home/server/$url")))
|
||||||
|
.body;
|
||||||
|
|
||||||
final res = await http('GET', json.encode({"url": urll}));
|
|
||||||
|
|
||||||
// final dataRes = json.decode(res);
|
|
||||||
final host = getMapValue(res, "baseUrl");
|
final host = getMapValue(res, "baseUrl");
|
||||||
final chapter = getMapValue(res, "chapter", encode: true);
|
final chapter = getMapValue(res, "chapter", encode: true);
|
||||||
final hash = getMapValue(chapter, "hash");
|
final hash = getMapValue(chapter, "hash");
|
||||||
@@ -322,7 +321,7 @@ class MangaDex extends MProvider {
|
|||||||
String mangaId, int offset, String lang, int sourceId) async {
|
String mangaId, int offset, String lang, int sourceId) async {
|
||||||
final url =
|
final url =
|
||||||
'https://api.mangadex.org/manga/$mangaId/feed?limit=500&offset=$offset&includes[]=user&includes[]=scanlation_group&order[volume]=desc&order[chapter]=desc&translatedLanguage[]=$lang&includeFuturePublishAt=0&includeEmptyPages=0${preferenceContentRating(sourceId)}';
|
'https://api.mangadex.org/manga/$mangaId/feed?limit=500&offset=$offset&includes[]=user&includes[]=scanlation_group&order[volume]=desc&order[chapter]=desc&translatedLanguage[]=$lang&includeFuturePublishAt=0&includeEmptyPages=0${preferenceContentRating(sourceId)}';
|
||||||
final res = await http('GET', json.encode({"url": url}));
|
final res = (await client.get(Uri.parse(url))).body;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import '../../../../model/source.dart';
|
|||||||
const _apiUrl = 'https://api.mangadex.org';
|
const _apiUrl = 'https://api.mangadex.org';
|
||||||
const _baseUrl = 'https://mangadex.org';
|
const _baseUrl = 'https://mangadex.org';
|
||||||
const _isNsfw = true;
|
const _isNsfw = true;
|
||||||
const _mangadexVersion = "0.0.6";
|
const _mangadexVersion = "0.0.65";
|
||||||
const _mangadexSourceCodeUrl =
|
const _mangadexSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/mangadex/mangadex.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/all/mangadex/mangadex.dart";
|
||||||
String _iconUrl =
|
String _iconUrl =
|
||||||
|
|||||||
@@ -4,13 +4,14 @@ import 'dart:convert';
|
|||||||
class MangaHere extends MProvider {
|
class MangaHere extends MProvider {
|
||||||
MangaHere();
|
MangaHere();
|
||||||
|
|
||||||
|
final Client client = Client();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getPopular(MSource source, int page) async {
|
Future<MPages> getPopular(MSource source, int page) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final res = (await client.get(
|
||||||
final url = "${source.baseUrl}/directory/$page.htm";
|
Uri.parse("${source.baseUrl}/directory/$page.htm"),
|
||||||
|
headers: getHeader(source.baseUrl)))
|
||||||
final data = {"url": url, "headers": headers};
|
.body;
|
||||||
final res = await http('POST', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
final names =
|
final names =
|
||||||
@@ -33,11 +34,10 @@ class MangaHere extends MProvider {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final res = (await client.get(
|
||||||
final url = "${source.baseUrl}/directory/$page.htm?latest";
|
Uri.parse("${source.baseUrl}/directory/$page.htm?latest"),
|
||||||
|
headers: getHeader(source.baseUrl)))
|
||||||
final data = {"url": url, "headers": headers};
|
.body;
|
||||||
final res = await http('POST', json.encode(data));
|
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
final names =
|
final names =
|
||||||
@@ -61,8 +61,6 @@ class MangaHere extends MProvider {
|
|||||||
@override
|
@override
|
||||||
Future<MPages> search(
|
Future<MPages> search(
|
||||||
MSource source, String query, int page, FilterList filterList) async {
|
MSource source, String query, int page, FilterList filterList) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
|
||||||
|
|
||||||
final filters = filterList.filters;
|
final filters = filterList.filters;
|
||||||
String url = "${source.baseUrl}/search";
|
String url = "${source.baseUrl}/search";
|
||||||
|
|
||||||
@@ -108,8 +106,9 @@ class MangaHere extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
url += "${ll(url)}title=$query&page=$page";
|
url += "${ll(url)}title=$query&page=$page";
|
||||||
final data = {"url": url, "headers": headers};
|
final res =
|
||||||
final res = await http('POST', json.encode(data));
|
(await client.get(Uri.parse(url), headers: getHeader(source.baseUrl)))
|
||||||
|
.body;
|
||||||
|
|
||||||
List<MManga> mangaList = [];
|
List<MManga> mangaList = [];
|
||||||
final names =
|
final names =
|
||||||
@@ -135,9 +134,9 @@ class MangaHere extends MProvider {
|
|||||||
final statusList = [
|
final statusList = [
|
||||||
{"Ongoing": 0, "Completed": 1}
|
{"Ongoing": 0, "Completed": 1}
|
||||||
];
|
];
|
||||||
final headers = getHeader(source.baseUrl);
|
final res = (await client.get(Uri.parse("${source.baseUrl}/$url"),
|
||||||
final data = {"url": "${source.baseUrl}/$url", "headers": headers};
|
headers: headers))
|
||||||
final res = await http('GET', json.encode(data));
|
.body;
|
||||||
MManga manga = MManga();
|
MManga manga = MManga();
|
||||||
manga.author =
|
manga.author =
|
||||||
xpath(res, '//*[@class="detail-info-right-say"]/a/text()').first;
|
xpath(res, '//*[@class="detail-info-right-say"]/a/text()').first;
|
||||||
@@ -172,8 +171,7 @@ class MangaHere extends MProvider {
|
|||||||
Future<List<String>> getPageList(MSource source, String url) async {
|
Future<List<String>> getPageList(MSource source, String url) async {
|
||||||
final headers = getHeader(source.baseUrl);
|
final headers = getHeader(source.baseUrl);
|
||||||
final urll = "${source.baseUrl}$url";
|
final urll = "${source.baseUrl}$url";
|
||||||
final data = {"url": urll, "headers": headers};
|
final res = (await client.get(Uri.parse(urll), headers: headers)).body;
|
||||||
final res = await http('GET', json.encode(data));
|
|
||||||
final pages = xpath(res, "//body/div/div/span/a/text()");
|
final pages = xpath(res, "//body/div/div/span/a/text()");
|
||||||
List<String> pageUrls = [];
|
List<String> pageUrls = [];
|
||||||
if (pages.isEmpty) {
|
if (pages.isEmpty) {
|
||||||
@@ -221,8 +219,9 @@ class MangaHere extends MProvider {
|
|||||||
"Host": "www.mangahere.cc",
|
"Host": "www.mangahere.cc",
|
||||||
"X-Requested-With": "XMLHttpRequest"
|
"X-Requested-With": "XMLHttpRequest"
|
||||||
};
|
};
|
||||||
final data = {"url": pageLink, "headers": headers};
|
|
||||||
final ress = await http('GET', json.encode(data));
|
final ress =
|
||||||
|
(await client.get(Uri.parse(pageLink), headers: headers)).body;
|
||||||
|
|
||||||
responseText = ress;
|
responseText = ress;
|
||||||
|
|
||||||
@@ -231,7 +230,8 @@ class MangaHere extends MProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String deobfuscatedScript = unpackJs(responseText.replaceAll("eval", ""));
|
String deobfuscatedScript =
|
||||||
|
unpackJs(responseText.replaceAll("eval", ""));
|
||||||
|
|
||||||
int baseLinkStartPos = deobfuscatedScript.indexOf("pix=") + 5;
|
int baseLinkStartPos = deobfuscatedScript.indexOf("pix=") + 5;
|
||||||
int baseLinkEndPos =
|
int baseLinkEndPos =
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import '../../../../model/source.dart';
|
import '../../../../model/source.dart';
|
||||||
|
|
||||||
Source get mangahereSource => _mangahereSource;
|
Source get mangahereSource => _mangahereSource;
|
||||||
const _mangahereVersion = "0.0.55";
|
const _mangahereVersion = "0.0.6";
|
||||||
const _mangahereSourceCodeUrl =
|
const _mangahereSourceCodeUrl =
|
||||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/en/mangahere/mangahere.dart";
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/manga/src/en/mangahere/mangahere.dart";
|
||||||
Source _mangahereSource = Source(
|
Source _mangahereSource = Source(
|
||||||
|
|||||||
Reference in New Issue
Block a user