dart format

This commit is contained in:
Moustapha Kodjo Amadou
2025-03-01 13:38:06 +01:00
parent 2388636458
commit 7d5e95679d
325 changed files with 6715 additions and 5516 deletions

View File

@@ -15,8 +15,10 @@ class NimeGami extends MProvider {
List<MManga> animeList = [];
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 images =
xpath(res, '//div[@class="wrapper-2-a"]/article/a/div/img/@src');
final images = xpath(
res,
'//div[@class="wrapper-2-a"]/article/a/div/img/@src',
);
for (var i = 0; i < names.length; i++) {
MManga anime = MManga();
@@ -34,10 +36,14 @@ class NimeGami extends MProvider {
(await client.get(Uri.parse("${source.baseUrl}/page/$page"))).body;
List<MManga> animeList = [];
final urls = xpath(res, '//div[@class="post-article"]/article/div/a/@href');
final names =
xpath(res, '//div[@class="post-article"]/article/div/a/@title');
final images =
xpath(res, '//div[@class="post-article"]/article/div/a/img/@src');
final names = xpath(
res,
'//div[@class="post-article"]/article/div/a/@title',
);
final images = xpath(
res,
'//div[@class="post-article"]/article/div/a/img/@src',
);
for (var i = 0; i < names.length; i++) {
MManga anime = MManga();
@@ -51,14 +57,17 @@ class NimeGami extends MProvider {
@override
Future<MPages> search(String query, int page, FilterList filterList) async {
final res = (await client.get(
Uri.parse("${source.baseUrl}/page/$page/?s=$query&post_type=post")))
.body;
final res =
(await client.get(
Uri.parse("${source.baseUrl}/page/$page/?s=$query&post_type=post"),
)).body;
List<MManga> animeList = [];
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 images =
xpath(res, '//div[@class="archive-a"]/article/div/a/img/@src');
final images = xpath(
res,
'//div[@class="archive-a"]/article/div/a/img/@src',
);
for (var i = 0; i < names.length; i++) {
MManga anime = MManga();
@@ -84,21 +93,25 @@ class NimeGami extends MProvider {
anime.author = author.first;
}
anime.genre = xpath(res, '//tr/td[@class="info_a"]/a/text()');
final epUrls = xpath(res, '//div[@class="list_eps_stream"]/li/@data')
.reversed
.toList();
final epUrls =
xpath(
res,
'//div[@class="list_eps_stream"]/li/@data',
).reversed.toList();
final epNums =
xpath(res, '//div[@class="list_eps_stream"]/li/@id').reversed.toList();
final names = xpath(res, '//div[@class="list_eps_stream"]/li/text()')
.reversed
.toList();
final names =
xpath(
res,
'//div[@class="list_eps_stream"]/li/text()',
).reversed.toList();
List<MChapter>? episodesList = [];
for (var i = 0; i < epUrls.length; i++) {
MChapter episode = MChapter();
episode.name = names[i];
episode.url = json.encode({
"episodeIndex": int.parse(substringAfterLast(epNums[i], '_')),
'urls': json.decode(utf8.decode(base64Url.decode(epUrls[i])))
'urls': json.decode(utf8.decode(base64Url.decode(epUrls[i]))),
});
episodesList.add(episode);
}
@@ -126,7 +139,8 @@ class NimeGami extends MProvider {
List<MVideo> videos = [];
if (url.contains("video.nimegami.id")) {
final realUrl = utf8.decode(
base64Url.decode(substringBefore(substringAfter(url, "url="), "&")));
base64Url.decode(substringBefore(substringAfter(url, "url="), "&")),
);
final a = await extractHXFileVideos(realUrl, quality);
videos.addAll(a);
} else if (url.contains("berkasdrive") || url.contains("drive.nimegami")) {
@@ -148,15 +162,19 @@ class NimeGami extends MProvider {
url = url.replaceAll(".co/", ".co/embed-") + ".html";
}
final res = (await client.get(Uri.parse(url))).body;
final script = xpath(res,
'//script[contains(text(), "eval") and contains(text(), "p,a,c,k,e,d")]/text()');
final script = xpath(
res,
'//script[contains(text(), "eval") and contains(text(), "p,a,c,k,e,d")]/text()',
);
if (script.isNotEmpty) {
final videoUrl = substringBefore(
substringAfter(
substringAfter(unpackJs(script.first), "sources:[", ""),
"file\":\"",
""),
'"');
substringAfter(
substringAfter(unpackJs(script.first), "sources:[", ""),
"file\":\"",
"",
),
'"',
);
if (videoUrl.isNotEmpty) {
return [toVideo(videoUrl, "HXFile - $quality")];
}

View File

@@ -5,12 +5,13 @@ const _nimegamiVersion = "0.0.55";
const _nimegamiCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/nimegami/nimegami.dart";
Source _nimegami = Source(
name: "NimeGami",
baseUrl: "https://nimegami.id",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/nimegami/icon.png",
sourceCodeUrl: _nimegamiCodeUrl,
version: _nimegamiVersion,
itemType: ItemType.anime);
name: "NimeGami",
baseUrl: "https://nimegami.id",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/nimegami/icon.png",
sourceCodeUrl: _nimegamiCodeUrl,
version: _nimegamiVersion,
itemType: ItemType.anime,
);

View File

@@ -10,32 +10,35 @@ class OploVerz extends MProvider {
@override
Future<MPages> getPopular(int page) async {
final res = (await client.get(Uri.parse(
"${source.baseUrl}/anime-list/page/$page/?order=popular")))
.body;
final res =
(await client.get(
Uri.parse("${source.baseUrl}/anime-list/page/$page/?order=popular"),
)).body;
return parseAnimeList(res);
}
@override
Future<MPages> getLatestUpdates(int page) async {
final res = (await client.get(
Uri.parse("${source.baseUrl}/anime-list/page/$page/?order=latest")))
.body;
final res =
(await client.get(
Uri.parse("${source.baseUrl}/anime-list/page/$page/?order=latest"),
)).body;
return parseAnimeList(res);
}
@override
Future<MPages> search(String query, int page, FilterList filterList) async {
final res = (await client.get(
Uri.parse("${source.baseUrl}/anime-list/page/$page/?title=$query")))
.body;
final res =
(await client.get(
Uri.parse("${source.baseUrl}/anime-list/page/$page/?title=$query"),
)).body;
return parseAnimeList(res);
}
@override
Future<MManga> getDetail(String url) async {
final statusList = [
{"ongoing": 0, "completed": 1}
{"ongoing": 0, "completed": 1},
];
final res = (await client.get(Uri.parse(url))).body;
@@ -47,12 +50,18 @@ class OploVerz extends MProvider {
anime.description = xpath(res, '//*[@class="desc"]/div/text()').first;
anime.genre = xpath(res, '//*[@class="genre-info"]/a/text()');
final epUrls =
xpath(res, '//div[@class="epsleft")]/span[@class="lchx"]/a/@href');
final names =
xpath(res, '//div[@class="epsleft")]/span[@class="lchx"]/a/text()');
final dates =
xpath(res, '//div[@class="epsleft")]/span[@class="date"]/text()');
final epUrls = xpath(
res,
'//div[@class="epsleft")]/span[@class="lchx"]/a/@href',
);
final names = xpath(
res,
'//div[@class="epsleft")]/span[@class="lchx"]/a/text()',
);
final dates = xpath(
res,
'//div[@class="epsleft")]/span[@class="date"]/text()',
);
final dateUploads = parseDates(dates, "dd/MM/yyyy", "id");
List<MChapter>? episodesList = [];
for (var i = 0; i < epUrls.length; i++) {
@@ -70,28 +79,33 @@ class OploVerz extends MProvider {
@override
Future<List<MVideo>> getVideoList(String url) async {
final res = (await client.get(Uri.parse(url))).body;
final dataPost = xpath(res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-post')
.first;
final dataNume = xpath(res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-nume')
.first;
final dataType = xpath(res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-type')
.first;
final dataPost =
xpath(
res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-post',
).first;
final dataNume =
xpath(
res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-nume',
).first;
final dataType =
xpath(
res,
'//*[@id="server"]/ul/li/div[contains(@id,"player-option")]/@data-type',
).first;
final ress = (await client.post(
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
headers: {
"_": "_"
},
body: {
"action": "player_ajax",
"post": dataPost,
"nume": dataNume,
"type": dataType
}))
.body;
final ress =
(await client.post(
Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php"),
headers: {"_": "_"},
body: {
"action": "player_ajax",
"post": dataPost,
"nume": dataNume,
"type": dataType,
},
)).body;
final playerLink =
xpath(ress, '//iframe[@class="playeriframe"]/@src').first;
@@ -127,8 +141,10 @@ class OploVerz extends MProvider {
List<MManga> animeList = [];
final urls = xpath(res, '//div[@class="relat"]/article/div/div/a/@href');
final names = xpath(res, '//div[@class="relat"]/article/div/div/a/@title');
final images =
xpath(res, '//div[@class="relat"]/article/div/div/a/div/img/@src');
final images = xpath(
res,
'//div[@class="relat"]/article/div/div/a/div/img/@src',
);
for (var i = 0; i < names.length; i++) {
MManga anime = MManga();
@@ -138,8 +154,10 @@ class OploVerz extends MProvider {
animeList.add(anime);
}
final pages = xpath(res, '//div[@class="pagination"]/a/@href');
final pageNumberCurrent = xpath(res,
'//div[@class="pagination"]/span[@class="page-numbers current"]/text()');
final pageNumberCurrent = xpath(
res,
'//div[@class="pagination"]/span[@class="page-numbers current"]/text()',
);
bool hasNextPage = true;
if (pageNumberCurrent.isNotEmpty && pages.isNotEmpty) {

View File

@@ -5,12 +5,13 @@ const _oploverzVersion = "0.0.5";
const _oploverzCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/oploverz/oploverz.dart";
Source _oploverz = Source(
name: "Oploverz",
baseUrl: "https://oploverz.gold",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/oploverz/icon.png",
sourceCodeUrl: _oploverzCodeUrl,
version: _oploverzVersion,
itemType: ItemType.anime);
name: "Oploverz",
baseUrl: "https://oploverz.gold",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/oploverz/icon.png",
sourceCodeUrl: _oploverzCodeUrl,
version: _oploverzVersion,
itemType: ItemType.anime,
);

View File

@@ -14,8 +14,9 @@ class OtakuDesu extends MProvider {
@override
Future<MPages> getPopular(int page) async {
final res =
(await client.get(Uri.parse("$baseUrl/complete-anime/page/$page")))
.body;
(await client.get(
Uri.parse("$baseUrl/complete-anime/page/$page"),
)).body;
return parseAnimeList(res);
}
@@ -29,8 +30,9 @@ class OtakuDesu extends MProvider {
@override
Future<MPages> search(String query, int page, FilterList filterList) async {
final res =
(await client.get(Uri.parse("$baseUrl/?s=$query&post_type=anime")))
.body;
(await client.get(
Uri.parse("$baseUrl/?s=$query&post_type=anime"),
)).body;
List<MManga> animeList = [];
final images = xpath(res, '//ul[@class="chivsrc"]/li/img/@src');
final names = xpath(res, '//ul[@class="chivsrc"]/li/h2/a/text()');
@@ -49,12 +51,14 @@ class OtakuDesu extends MProvider {
@override
Future<MManga> getDetail(String url) async {
final statusList = [
{"Ongoing": 0, "Completed": 1}
{"Ongoing": 0, "Completed": 1},
];
final res = (await client.get(Uri.parse(url))).body;
MManga anime = MManga();
final status = xpath(
res, '//*[@class="infozingle"]/p[contains(text(), "Status")]/text()');
res,
'//*[@class="infozingle"]/p[contains(text(), "Status")]/text()',
);
if (status.isNotEmpty) {
anime.status = parseStatus(status.first.split(':').last, statusList);
}
@@ -64,7 +68,9 @@ class OtakuDesu extends MProvider {
}
final genre = xpath(
res, '//*[@class="infozingle"]/p[contains(text(), "Genre")]/text()');
res,
'//*[@class="infozingle"]/p[contains(text(), "Genre")]/text()',
);
if (genre.isNotEmpty) {
anime.genre = genre.first.split(':').last.split(',');
}
@@ -73,7 +79,9 @@ class OtakuDesu extends MProvider {
final names = xpath(res, '//div[@class="episodelist"]/ul/li/span/a/text()');
final dates = xpath(
res, '//div[@class="episodelist"]/ul/li/span[@class="zeebr"]/text()');
res,
'//div[@class="episodelist"]/ul/li/span[@class="zeebr"]/text()',
);
final dateUploads = parseDates(dates, "d MMMM,yyyy", "id");
List<MChapter>? episodesList = [];
for (var i = 1; i < epUrls.length; i++) {
@@ -93,18 +101,23 @@ class OtakuDesu extends MProvider {
final res = (await client.get(Uri.parse(url))).body;
final script =
xpath(res, '//script[contains(text(), "{action:")]/text()').first;
final nonceAction =
substringBefore(substringAfter(script, "{action:\""), '"');
final nonceAction = substringBefore(
substringAfter(script, "{action:\""),
'"',
);
final action = substringBefore(substringAfter(script, "action:\""), '"');
final resNonceAction = (await client.post(
Uri.parse("$baseUrl/wp-admin/admin-ajax.php"),
headers: {"_": "_"},
body: {"action": nonceAction}))
.body;
final resNonceAction =
(await client.post(
Uri.parse("$baseUrl/wp-admin/admin-ajax.php"),
headers: {"_": "_"},
body: {"action": nonceAction},
)).body;
final nonce = substringBefore(substringAfter(resNonceAction, ":\""), '"');
final mirrorstream =
xpath(res, '//*[@class="mirrorstream"]/ul/li/a/@data-content');
final mirrorstream = xpath(
res,
'//*[@class="mirrorstream"]/ul/li/a/@data-content',
);
for (var stream in mirrorstream) {
List<MVideo> a = [];
final decodedData = json.decode(utf8.decode(base64Url.decode(stream)));
@@ -112,17 +125,12 @@ class OtakuDesu extends MProvider {
final id = decodedData["id"];
final i = decodedData["i"];
final res = (await client
.post(Uri.parse("$baseUrl/wp-admin/admin-ajax.php"), headers: {
"_": "_"
}, body: {
"i": i,
"id": id,
"q": q,
"nonce": nonce,
"action": action
}))
.body;
final res =
(await client.post(
Uri.parse("$baseUrl/wp-admin/admin-ajax.php"),
headers: {"_": "_"},
body: {"i": i, "id": id, "q": q, "nonce": nonce, "action": action},
)).body;
final resJson = json.decode(res);
final html = utf8.decode(base64Url.decode(resJson["data"]));
String url = xpath(html, '//iframe/@src').first;
@@ -152,8 +160,10 @@ class OtakuDesu extends MProvider {
final res = (await client.get(Uri.parse(url))).body;
final script =
xpath(res, '//script[contains(text(), "player.src")]/text()').first;
final videoUrl =
substringBefore(substringAfter(script, "src: \""), '"');
final videoUrl = substringBefore(
substringAfter(script, "src: \""),
'"',
);
MVideo video = MVideo();
video
..url = videoUrl
@@ -196,12 +206,18 @@ class OtakuDesu extends MProvider {
MPages parseAnimeList(String res) {
List<MManga> animeList = [];
final urls =
xpath(res, '//div[@class="detpost"]/div[@class="thumb"]/a/@href');
final names = xpath(res,
'//div[@class="detpost"]/div[@class="thumb"]/a/div[@class="thumbz"]/h2/text()');
final images = xpath(res,
'//div[@class="detpost"]/div[@class="thumb"]/a/div[@class="thumbz"]/img/@src');
final urls = xpath(
res,
'//div[@class="detpost"]/div[@class="thumb"]/a/@href',
);
final names = xpath(
res,
'//div[@class="detpost"]/div[@class="thumb"]/a/div[@class="thumbz"]/h2/text()',
);
final images = xpath(
res,
'//div[@class="detpost"]/div[@class="thumb"]/a/div[@class="thumbz"]/img/@src',
);
for (var i = 0; i < names.length; i++) {
MManga anime = MManga();
@@ -211,27 +227,31 @@ class OtakuDesu extends MProvider {
animeList.add(anime);
}
final pages = xpath(
res, '//div[@class="pagenavix"]/a[@class="next page-numbers"]/@href');
res,
'//div[@class="pagenavix"]/a[@class="next page-numbers"]/@href',
);
return MPages(animeList, pages.isNotEmpty);
}
List<dynamic> getSourcePreferences() {
return [
EditTextPreference(
key: "overrideBaseUrl",
title: "Override BaseUrl",
summary: "",
value: "https://otakudesu.cloud",
dialogTitle: "Override BaseUrl",
dialogMessage: "",
text: "https://otakudesu.cloud"),
key: "overrideBaseUrl",
title: "Override BaseUrl",
summary: "",
value: "https://otakudesu.cloud",
dialogTitle: "Override BaseUrl",
dialogMessage: "",
text: "https://otakudesu.cloud",
),
ListPreference(
key: "preferred_quality",
title: "Preferred quality",
summary: "",
valueIndex: 1,
entries: ["1080p", "720p", "480p", "360p"],
entryValues: ["1080", "720", "480", "360"])
key: "preferred_quality",
title: "Preferred quality",
summary: "",
valueIndex: 1,
entries: ["1080p", "720p", "480p", "360p"],
entryValues: ["1080", "720", "480", "360"],
),
];
}
}

View File

@@ -5,12 +5,13 @@ const _otakudesuVersion = "0.0.56";
const _otakudesuCodeUrl =
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/otakudesu/otakudesu.dart";
Source _otakudesu = Source(
name: "OtakuDesu",
baseUrl: "https://otakudesu.cloud",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/otakudesu/icon.png",
sourceCodeUrl: _otakudesuCodeUrl,
version: _otakudesuVersion,
itemType: ItemType.anime);
name: "OtakuDesu",
baseUrl: "https://otakudesu.cloud",
lang: "id",
typeSource: "single",
iconUrl:
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/id/otakudesu/icon.png",
sourceCodeUrl: _otakudesuCodeUrl,
version: _otakudesuVersion,
itemType: ItemType.anime,
);