From 51f7fbefca040a16f1a69309ce69fdb15d41d2fa Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Thu, 16 Nov 2023 11:43:52 -0300 Subject: [PATCH] fix(tr/hdfilmcehennemi): Fix urls on search + add support for series (#2518) --- src/tr/hdfilmcehennemi/build.gradle | 2 +- .../tr/hdfilmcehennemi/HDFilmCehennemi.kt | 72 +++++++++++++------ 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/tr/hdfilmcehennemi/build.gradle b/src/tr/hdfilmcehennemi/build.gradle index f56eac60f..fbd8fe543 100644 --- a/src/tr/hdfilmcehennemi/build.gradle +++ b/src/tr/hdfilmcehennemi/build.gradle @@ -8,7 +8,7 @@ ext { extName = 'HDFilmCehennemi' pkgNameSuffix = 'tr.hdfilmcehennemi' extClass = '.HDFilmCehennemi' - extVersionCode = 4 + extVersionCode = 5 libVersion = '13' containsNsfw = true } diff --git a/src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemi.kt b/src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemi.kt index d9b1bda28..f3998eba1 100644 --- a/src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemi.kt +++ b/src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemi.kt @@ -33,6 +33,8 @@ import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy +import java.text.SimpleDateFormat +import java.util.Locale class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() { @@ -106,22 +108,22 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } @Serializable - data class SearchResponse(val result: List) + data class SearchResponse(val result: List) @Serializable - data class MovieDto(val title: String, val poster: String, val slug: String) + data class ItemDto(val title: String, val poster: String, val slug: String, val slug_prefix: String) override fun searchAnimeParse(response: Response): AnimesPage { val data = response.parseAs() - val movies = data.result.map { + val items = data.result.map { SAnime.create().apply { title = it.title thumbnail_url = "$baseUrl/uploads/poster/" + it.poster - url = "/" + it.slug + url = "/" + it.slug_prefix + it.slug } } - return AnimesPage(movies, false) + return AnimesPage(items, false) } override fun searchAnimeSelector(): String { @@ -138,7 +140,10 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() { // =========================== Anime Details ============================ override fun animeDetailsParse(document: Document) = SAnime.create().apply { - status = SAnime.COMPLETED + status = when { + document.location().contains("/dizi/") -> SAnime.UNKNOWN // serie + else -> SAnime.COMPLETED // movie + } val div = document.selectFirst("div.card-body > div.row")!! @@ -154,21 +159,39 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } // ============================== Episodes ============================== - override fun fetchEpisodeList(anime: SAnime) = Observable.just( - listOf( - SEpisode.create().apply { - url = anime.url - name = "Movie" - }, - ), - ) + override fun fetchEpisodeList(anime: SAnime): Observable> { + // Series + if (anime.url.contains("/dizi/")) return super.fetchEpisodeList(anime) - override fun episodeListSelector(): String { - throw UnsupportedOperationException("Not used.") + // Movies + return Observable.just( + listOf( + SEpisode.create().apply { + url = anime.url + name = "Movie" + episode_number = 1F + }, + ), + ) } - override fun episodeFromElement(element: Element): SEpisode { - throw UnsupportedOperationException("Not used.") + override fun episodeListParse(response: Response) = + super.episodeListParse(response).sortedByDescending { it.episode_number } + + override fun episodeListSelector() = "div#seasonsTabs-tabContent div.card-list-item > a" + + private val numberRegex by lazy { Regex("(\\d+)\\.") } + + override fun episodeFromElement(element: Element) = SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + + name = element.selectFirst("h3")!!.text() + + date_upload = element.selectFirst("date")?.attr("datetime")?.toDate() ?: 0L + + val (seasonNum, epNum) = numberRegex.findAll(name).map { it.groupValues.last() }.toList() + // good luck trying to track this xD + episode_number = "$seasonNum.${epNum.padStart(3, '0')}".toFloatOrNull() ?: 1F } // ============================ Video Links ============================= @@ -179,9 +202,9 @@ class HDFilmCehennemi : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListParse(response: Response): List