From 992d85f0e1423a81d237b167026fb92dccfd28f5 Mon Sep 17 00:00:00 2001 From: Wanaldino Antimonio Date: Tue, 22 Oct 2024 23:03:29 +0200 Subject: [PATCH] Fix(es/AnimeFenix): Fix AnimeFenix. (#320) Co-authored-by: Wanaldino --- src/es/animefenix/build.gradle | 2 +- .../es/animefenix/AnimeFenixFilters.kt | 2 +- .../es/animefenix/Animefenix.kt | 47 ++++++++++++++----- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/es/animefenix/build.gradle b/src/es/animefenix/build.gradle index 61e7fe45..f08ec865 100644 --- a/src/es/animefenix/build.gradle +++ b/src/es/animefenix/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'Animefenix' extClass = '.Animefenix' - extVersionCode = 41 + extVersionCode = 42 } apply from: "$rootDir/common.gradle" diff --git a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/AnimeFenixFilters.kt b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/AnimeFenixFilters.kt index eaab6fbf..65c9aa4e 100644 --- a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/AnimeFenixFilters.kt +++ b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/AnimeFenixFilters.kt @@ -78,7 +78,7 @@ object AnimeFenixFilters { class SortFilter : QueryPartFilter("Orden", AnimeFenixFiltersData.SORT) - private object AnimeFenixFiltersData { + object AnimeFenixFiltersData { val YEARS = (1990..Calendar.getInstance().get(Calendar.YEAR)).map { Pair("$it", "$it") }.reversed().toTypedArray() val TYPES = arrayOf( diff --git a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt index 4e597c5f..8bf7dfeb 100644 --- a/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt +++ b/src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt @@ -46,8 +46,24 @@ class Animefenix : ConfigurableAnimeSource, AnimeHttpSource() { private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } + private object CSSQuery { + object AnimeList { + const val GRID = "main div.container div.grid" + const val ELEMENT = "a" + const val ELEMENT_URL = "a" + const val ELEMENT_TITLE = "div div h3" + const val ELEMENT_THUMBNAIL_URL = "img" + const val ELEMENT_STATUS = "div div span.bg-zinc-700" + const val NEXT = "a:has(span.sr-only:contains(Next))" + } + + object EpisodeList { + const val EPISODE = "div.container div.bg-zinc-800 ul li" + const val NUMBER = "a span span" + const val URL = "a" + } + } companion object { - private val SERVER_REGEX = """tabsArray\['?\d+'?]\s*=\s*['\"](https[^'\"]+)['\"]""".toRegex() private const val PREF_QUALITY_KEY = "preferred_quality" private const val PREF_QUALITY_DEFAULT = "1080" private val QUALITY_LIST = arrayOf("1080", "720", "480", "360") @@ -66,13 +82,17 @@ class Animefenix : ConfigurableAnimeSource, AnimeHttpSource() { override fun popularAnimeParse(response: Response): AnimesPage { val document = response.asJsoup() - val elements = document.select("main > div.container > div.grid > div.group") - val nextPage = document.select("nav[aria-label=Pagination] span:containsOwn(Next)").any() + + val grid = document.select(CSSQuery.AnimeList.GRID)[1] + + val elements = grid.select(CSSQuery.AnimeList.ELEMENT) + val nextPage = document.select(CSSQuery.AnimeList.NEXT).any() val animeList = elements.map { element -> SAnime.create().apply { - setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href")) - title = element.selectFirst("div h3.text-primary")!!.ownText() - thumbnail_url = element.selectFirst("img.object-cover")?.attr("abs:src") + setUrlWithoutDomain(element.select(CSSQuery.AnimeList.ELEMENT_URL).attr("abs:href")) + title = element.select(CSSQuery.AnimeList.ELEMENT_TITLE).text() + thumbnail_url = element.select(CSSQuery.AnimeList.ELEMENT_THUMBNAIL_URL).attr("abs:src") + status = parseStatus(element.select(CSSQuery.AnimeList.ELEMENT_STATUS).text()) } } return AnimesPage(animeList, nextPage) @@ -96,10 +116,12 @@ class Animefenix : ConfigurableAnimeSource, AnimeHttpSource() { override fun episodeListParse(response: Response): List { val document = response.asJsoup() - return document.select("div.container > div > ul > li").map { element -> + return document.select(CSSQuery.EpisodeList.EPISODE).map { it -> + val epNum = it.select(CSSQuery.EpisodeList.NUMBER).text().replace("Episodio", "") SEpisode.create().apply { - name = element.selectFirst("span > span")!!.ownText() - setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href")) + episode_number = epNum.toFloat() + name = "Episodio $epNum" + setUrlWithoutDomain(it.select(CSSQuery.EpisodeList.URL).attr("abs:href")) } } } @@ -107,8 +129,11 @@ class Animefenix : ConfigurableAnimeSource, AnimeHttpSource() { override fun videoListParse(response: Response): List