From fe9480381571e4c96a8b26b4391b407e689a3b05 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Mon, 25 Sep 2023 08:31:36 -0300 Subject: [PATCH] feat(all/missav): Include more info in anime details page (#2253) --- src/all/missav/build.gradle | 2 +- .../animeextension/all/missav/MissAV.kt | 45 ++++++++++++++----- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/all/missav/build.gradle b/src/all/missav/build.gradle index 2b684e3aa..4b85449ac 100644 --- a/src/all/missav/build.gradle +++ b/src/all/missav/build.gradle @@ -7,7 +7,7 @@ ext { extName = 'MissAV' pkgNameSuffix = 'all.missav' extClass = '.MissAV' - extVersionCode = 1 + extVersionCode = 2 containsNsfw = true } diff --git a/src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAV.kt b/src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAV.kt index aa7ef09a7..937f8f4ae 100644 --- a/src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAV.kt +++ b/src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAV.kt @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.util.asJsoup import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request import okhttp3.Response +import org.jsoup.nodes.Element import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -48,11 +49,11 @@ class MissAV : AnimeHttpSource(), ConfigurableAnimeSource { GET("$baseUrl/en/today-hot?page=$page", headers) override fun popularAnimeParse(response: Response): AnimesPage { - val document = response.asJsoup() + val document = response.use { it.asJsoup() } val entries = document.select("div.thumbnail").map { element -> SAnime.create().apply { - element.select("a.text-secondary").let { + element.select("a.text-secondary").also { setUrlWithoutDomain(it.attr("href")) title = it.text() } @@ -95,19 +96,38 @@ class MissAV : AnimeHttpSource(), ConfigurableAnimeSource { override fun searchAnimeParse(response: Response) = popularAnimeParse(response) override fun animeDetailsParse(response: Response): SAnime { - val document = response.asJsoup() + val document = response.use { it.asJsoup() } return SAnime.create().apply { - title = document.select("h1.text-base").text() - genre = document.select("div.text-secondary > a[href*=/genres/]").joinToString { it.text() } - description = document.select("div.mb-1").text() - author = document.select("div.text-secondary > a[href*=/makers/]").joinToString { it.text() } - artist = document.select("div.text-secondary > a[href*=/actresses/]").joinToString { it.text() } + title = document.selectFirst("h1.text-base")!!.text() + genre = document.getInfo("/genres/") + author = listOfNotNull( + document.getInfo("/directors/"), + document.getInfo("/makers/"), + ).joinToString() + artist = document.getInfo("/actresses/") status = SAnime.COMPLETED - thumbnail_url = document.select("video.player").attr("abs:data-poster") + thumbnail_url = document.selectFirst("video.player")?.attr("abs:data-poster") + + description = buildString { + document.selectFirst("div.mb-1")?.text()?.also { append("$it\n") } + + document.getInfo("/labels/")?.also { append("\nLabel: $it") } + document.getInfo("/series/")?.also { append("\nSeries: $it") } + + document.select("div.text-secondary:not(:has(a)):has(span)") + .eachText() + .forEach { append("\n$it") } + } } } + private fun Element.getInfo(urlPart: String) = + select("div.text-secondary > a[href*=$urlPart]") + .eachText() + .joinToString() + .takeIf(String::isNotBlank) + override fun fetchEpisodeList(anime: SAnime): Observable> { return Observable.just( listOf( @@ -120,9 +140,10 @@ class MissAV : AnimeHttpSource(), ConfigurableAnimeSource { } override fun videoListParse(response: Response): List