From 787ef77a7e218feb21e3d2ff968818e7041bce12 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:17:40 +0100 Subject: [PATCH] Refactor --- .../datalifeengine/datalifeengine.dart | 9 +-- anime/multisrc/dopeflix/dopeflix.dart | 23 +++---- anime/multisrc/zorotheme/zorotheme.dart | 62 ++++------------- anime/src/en/aniwave/aniwave.dart | 30 ++++----- anime/src/en/uhdmovies/uhdmovies.dart | 9 +-- anime/src/it/animesaturn/animesaturn.dart | 7 +- manga/multisrc/heancms/heancms.dart | 13 ++-- manga/multisrc/mangareader/mangareader.dart | 11 ++-- manga/src/all/batoto/batoto.dart | 66 ++++++------------- 9 files changed, 71 insertions(+), 159 deletions(-) diff --git a/anime/multisrc/datalifeengine/datalifeengine.dart b/anime/multisrc/datalifeengine/datalifeengine.dart index a10a1814..e1dbe215 100644 --- a/anime/multisrc/datalifeengine/datalifeengine.dart +++ b/anime/multisrc/datalifeengine/datalifeengine.dart @@ -145,13 +145,10 @@ class DataLifeEngine extends MProvider { } MPages animeFromElement(String res, String baseUrl) { - final htmls = querySelectorAll(res, - selector: "div#dle-content > div.mov", - typeElement: 1, - attributes: "", - typeRegExp: 0); + final htmls = parseHtml(res).select("div#dle-content > div.mov"); List animeList = []; - for (var html in htmls) { + for (var h in htmls) { + final html = h.innerHtml; final url = xpath(html, '//a/@href').first; final name = xpath(html, '//a/text()').first; final image = xpath(html, '//div[contains(@class,"mov")]/img/@src').first; diff --git a/anime/multisrc/dopeflix/dopeflix.dart b/anime/multisrc/dopeflix/dopeflix.dart index 41d0c328..7c76df0d 100644 --- a/anime/multisrc/dopeflix/dopeflix.dart +++ b/anime/multisrc/dopeflix/dopeflix.dart @@ -121,14 +121,11 @@ class DopeFlix extends MProvider { "${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId" }; final html = await http('GET', json.encode(dataE)); - final epsHtml = querySelectorAll(html, - selector: "div.eps-item", - typeElement: 2, - attributes: "", - typeRegExp: 0); - print( - "${preferenceBaseUrl(source.id)}/ajax/v2/season/episodes/$seasonId"); - for (var epHtml in epsHtml) { + + final epsHtmls = parseHtml(html).select("div.eps-item"); + + for (var epH in epsHtmls) { + final epHtml = epH.outerHtml; final episodeId = xpath(epHtml, '//div[contains(@class,"eps-item")]/@data-id') .first; @@ -152,13 +149,11 @@ class DopeFlix extends MProvider { url = Uri.parse(url).path; final res = await http( 'GET', json.encode({"url": "${preferenceBaseUrl(source.id)}/$url"})); - final vidsHtml = querySelectorAll(res, - selector: "ul.fss-list a.btn-play", - typeElement: 2, - attributes: "", - typeRegExp: 0); + final vidsHtmls = parseHtml(res).select("ul.fss-list a.btn-play"); + List videos = []; - for (var vidHtml in vidsHtml) { + for (var vidH in vidsHtmls) { + final vidHtml = vidH.outerHtml; final id = xpath(vidHtml, '//a/@data-id').first; final name = xpath(vidHtml, '//span/text()').first; final resSource = await http( diff --git a/anime/multisrc/zorotheme/zorotheme.dart b/anime/multisrc/zorotheme/zorotheme.dart index c684e952..2f734ec8 100644 --- a/anime/multisrc/zorotheme/zorotheme.dart +++ b/anime/multisrc/zorotheme/zorotheme.dart @@ -155,36 +155,17 @@ class ZoroTheme extends MProvider { final resEp = await http('GET', json.encode(dataEp)); final html = json.decode(resEp)["html"]; + final epElements = parseHtml(html).select("a.ep-item"); - final epUrls = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "href", - typeRegExp: 0); - final numbers = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "data-number", - typeRegExp: 0); - - final titles = querySelectorAll(html, - selector: "a.ep-item", - typeElement: 3, - attributes: "title", - typeRegExp: 0); - - List episodes = []; - - for (var i = 0; i < titles.length; i++) { - final number = numbers[i]; - final title = titles[i]; - episodes.add("Episode $number: $title"); - } List? episodesList = []; - for (var i = 0; i < episodes.length; i++) { + + for (var epElement in epElements) { + final number = epElement.attr("data-number"); + final title = epElement.attr("title"); + MChapter episode = MChapter(); - episode.name = episodes[i]; - episode.url = epUrls[i]; + episode.name = "Episode $number: $title"; + episode.url = epElement.getHref; episodesList.add(episode); } @@ -204,31 +185,15 @@ class ZoroTheme extends MProvider { final res = await http('GET', json.encode(datas)); final html = json.decode(res)["html"]; - final names = querySelectorAll(html, - selector: "div.server-item", - typeElement: 0, - attributes: "", - typeRegExp: 0); - - final ids = querySelectorAll(html, - selector: "div.server-item", - typeElement: 3, - attributes: "data-id", - typeRegExp: 0); - - final subDubs = querySelectorAll(html, - selector: "div.server-item", - typeElement: 3, - attributes: "data-type", - typeRegExp: 0); + final serverElements = parseHtml(html).select("div.server-item"); List videos = []; final hosterSelection = preferenceHosterSelection(source.id); final typeSelection = preferenceTypeSelection(source.id); - for (var i = 0; i < names.length; i++) { - final name = names[i]; - final id = ids[i]; - final subDub = subDubs[i]; + for (var serverElement in serverElements) { + final name = serverElement.text; + final id = serverElement.attr("data-id"); + final subDub = serverElement.attr("data-type"); final datasE = { "url": "${source.baseUrl}/ajax${ajaxRoute('${source.baseUrl}')}/episode/sources?id=$id", @@ -237,7 +202,6 @@ class ZoroTheme extends MProvider { final resE = await http('GET', json.encode(datasE)); String epUrl = substringBefore(substringAfter(resE, "\"link\":\""), "\""); - List a = []; if (hosterSelection.contains(name) && typeSelection.contains(subDub)) { diff --git a/anime/src/en/aniwave/aniwave.dart b/anime/src/en/aniwave/aniwave.dart index 2ec4582a..cbfd7b47 100644 --- a/anime/src/en/aniwave/aniwave.dart +++ b/anime/src/en/aniwave/aniwave.dart @@ -119,26 +119,21 @@ class Aniwave extends MProvider { } anime.genre = xpath(res, '//div[contains(text(),"Genre")]/span/a/text()'); - final id = querySelectorAll(res, - selector: "div[data-id]", - typeElement: 3, - attributes: "data-id", - typeRegExp: 0) - .first; + final id = parseHtml(res).selectFirst("div[data-id]").attr("data-id"); final encrypt = vrfEncrypt(id); 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 html = json.decode(resEp)["result"]; List? episodesList = []; - final epsHtml = querySelectorAll(html, - selector: "div.episodes ul > li", - typeElement: 2, - attributes: "", - typeRegExp: 0); - for (var epHtml in epsHtml) { + + final epsHtmls = parseHtml(html).select("div.episodes ul > li"); + + for (var epH in epsHtmls) { + final epHtml = epH.outerHtml; final title = xpath(epHtml, '//li/@title').isNotEmpty ? xpath(epHtml, '//li/@title').first : ""; @@ -183,13 +178,12 @@ class Aniwave extends MProvider { "url": "${preferenceBaseUrl(source.id)}/ajax/server/list/$ids?$vrf" })); final html = json.decode(res)["result"]; - final vidsHtml = querySelectorAll(html, - selector: "div.servers > div", - typeElement: 2, - attributes: "", - typeRegExp: 0); + + final vidsHtmls = parseHtml(html).select("div.servers > div"); + List videos = []; - for (var vidHtml in vidsHtml) { + for (var vidH in vidsHtmls) { + final vidHtml = vidH.outerHtml; final type = xpath(vidHtml, '//div/@data-type').first; final serversIds = xpath(vidHtml, '//li/@data-link-id'); for (int i = 0; i < serversIds.length; i++) { diff --git a/anime/src/en/uhdmovies/uhdmovies.dart b/anime/src/en/uhdmovies/uhdmovies.dart index 1a0610a2..95228f34 100644 --- a/anime/src/en/uhdmovies/uhdmovies.dart +++ b/anime/src/en/uhdmovies/uhdmovies.dart @@ -197,12 +197,9 @@ class UHDMovies extends MProvider { "url": nextUrl, "headers": {"referer": url, "Cookie": "$cookieName=$cookieValue"} })); - final lastRes = querySelectorAll(response, - selector: "meta[http-equiv]", - typeElement: 3, - attributes: "content", - typeRegExp: 0) - .first; + + final lastRes = + parseHtml(response).selectFirst("meta[http-equiv]").attr("content"); return substringAfter(lastRes, "url="); } diff --git a/anime/src/it/animesaturn/animesaturn.dart b/anime/src/it/animesaturn/animesaturn.dart index 28fe45b4..42d66edd 100644 --- a/anime/src/it/animesaturn/animesaturn.dart +++ b/anime/src/it/animesaturn/animesaturn.dart @@ -197,12 +197,7 @@ class AnimeSaturn extends MProvider { if (resVid.contains("jwplayer(")) { masterUrl = substringBefore(substringAfter(resVid, "file: \""), "\""); } else { - masterUrl = querySelectorAll(resVid, - selector: "source", - typeElement: 3, - attributes: "src", - typeRegExp: 0) - .first; + masterUrl = parseHtml(resVid).selectFirst("source").attr("src"); } List videos = []; diff --git a/manga/multisrc/heancms/heancms.dart b/manga/multisrc/heancms/heancms.dart index a1458467..9b24b675 100644 --- a/manga/multisrc/heancms/heancms.dart +++ b/manga/multisrc/heancms/heancms.dart @@ -148,14 +148,13 @@ class HeanCms extends MProvider { res = await http('GET', json.encode(data)); List pageUrls = []; - var imagesRes = querySelectorAll(res, - selector: "div.min-h-screen > div.container > p.items-center", - typeElement: 1, - attributes: "", - typeRegExp: 0); - pageUrls = xpath(imagesRes.first, '//img/@src'); + var imagesRes = parseHtml(res) + .selectFirst("div.min-h-screen > div.container > p.items-center") + .innerHtml; - pageUrls.addAll(xpath(imagesRes.first, '//img/@data-src')); + pageUrls = xpath(imagesRes, '//img/@src'); + + pageUrls.addAll(xpath(imagesRes, '//img/@data-src')); return pageUrls.where((e) => e.isNotEmpty).toList(); } diff --git a/manga/multisrc/mangareader/mangareader.dart b/manga/multisrc/mangareader/mangareader.dart index 3bd8e568..67a7d2f4 100644 --- a/manga/multisrc/mangareader/mangareader.dart +++ b/manga/multisrc/mangareader/mangareader.dart @@ -145,12 +145,11 @@ class MangaReader extends MProvider { .replaceAll("[Add, ]", ""); } - final description = querySelectorAll(res, - selector: ".desc, .entry-content[itemprop=description]", - typeElement: 0, - attributes: "", - typeRegExp: 0); - if (description.isNotEmpty) { + final description = parseHtml(res) + .selectFirst(".desc, .entry-content[itemprop=description]") + ?.text; + + if (description != null) { manga.description = description.first; } diff --git a/manga/src/all/batoto/batoto.dart b/manga/src/all/batoto/batoto.dart index 4be7bdee..0287ba18 100644 --- a/manga/src/all/batoto/batoto.dart +++ b/manga/src/all/batoto/batoto.dart @@ -128,25 +128,18 @@ class Batoto extends MProvider { .split(","); manga.description = xpath(res, '//*[@class="limit-html"]/text()').first; - List chapsElement = querySelectorAll(res, - selector: "div.main div.p-2", - typeElement: 2, - attributes: "", - typeRegExp: 0); + final chapElements = parseHtml(res).select("div.main div.p-2"); + List times = []; List chapsUrls = []; List chapsNames = []; List scanlators = []; - for (var element in chapsElement) { - final urlElement = querySelectorAll(element, - selector: "a.chapt", - typeElement: 2, - attributes: "", - typeRegExp: 0) - .first; + for (MElement el in chapElements) { + final chapHtml = el.selectFirst("a.chapt").outerHtml; + final element = el.outerHtml; final group = xpath(element, '//*[@class="extra"]/a/text()').first; - final name = xpath(urlElement, '//a/text()').first; - final url = xpath(urlElement, '//a/@href').first; + final name = xpath(chapHtml, '//a/text()').first; + final url = xpath(chapHtml, '//a/@href').first; final time = xpath(element, '//*[@class="extra"]/i[@class="ps-3"]/text()').first; times.add(time); @@ -201,46 +194,25 @@ class Batoto extends MProvider { MPages mangaElementM(String res, MSource source) async { final lang = source.lang.replaceAll("-", "_"); - var resB = querySelectorAll(res, - selector: "div#series-list div.col", - typeElement: 2, - attributes: "", - typeRegExp: 0); + final mangaElements = parseHtml(res).select("div#series-list div.col"); List images = []; List urls = []; List names = []; - for (var element in resB) { + for (MElement element in mangaElements) { if (source.lang == "all" || - source.lang == "en" && element.contains('no-flag') || - element.contains('data-lang="$lang"')) { - final item = querySelectorAll(element, - selector: "a.item-cover", - typeElement: 2, - attributes: "", - typeRegExp: 0) - .first; - final img = querySelectorAll(item, - selector: "img", - typeElement: 3, - attributes: "src", - typeRegExp: 0) - .first; - final url = querySelectorAll(item, - selector: "a", - typeElement: 3, - attributes: "href", - typeRegExp: 0) - .first; + source.lang == "en" && element.outerHtml.contains('no-flag') || + element.outerHtml.contains('data-lang="$lang"')) { + final itemHtml = element.selectFirst("a.item-cover").outerHtml; + + final img = parseHtml(itemHtml).selectFirst("img").getSrc; + + final url = parseHtml(itemHtml).selectFirst("a").getHref; images.add(img); - urls.add(url); - final title = querySelectorAll(element, - selector: "a.item-title", - typeElement: 0, - attributes: "", - typeRegExp: 0) - .first; + urls.add(url.replaceAll(";", "&")); + final title = element.selectFirst("a.item-title").text; + names.add(title); } }