From e6bc436e9686f7811f5aa071854b02f4e4fda81a Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Sat, 17 Jun 2023 20:46:29 +0200 Subject: [PATCH] fix(en/dramacool): Fix urls & refactor (#1750) --- src/en/dramacool/build.gradle | 2 +- .../animeextension/en/dramacool/DramaCool.kt | 267 +++++++++--------- 2 files changed, 131 insertions(+), 138 deletions(-) diff --git a/src/en/dramacool/build.gradle b/src/en/dramacool/build.gradle index 4c33c8def..677e54f08 100644 --- a/src/en/dramacool/build.gradle +++ b/src/en/dramacool/build.gradle @@ -5,7 +5,7 @@ ext { extName = 'DramaCool' pkgNameSuffix = 'en.dramacool' extClass = '.DramaCool' - extVersionCode = 36 + extVersionCode = 37 libVersion = '13' } diff --git a/src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/DramaCool.kt b/src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/DramaCool.kt index 52b7f920c..88b028733 100644 --- a/src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/DramaCool.kt +++ b/src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/DramaCool.kt @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.animeextension.en.dramacool import android.app.Application import android.content.SharedPreferences import android.widget.Toast +import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.AppInfo @@ -33,7 +34,7 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val name = "DramaCool" - private val defaultBaseUrl = "https://dramacool.cr" + private val defaultBaseUrl = "https://dramacool.hr" override val baseUrl by lazy { getPrefBaseUrl() } @@ -47,41 +48,95 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - // Popular Anime - override fun popularAnimeSelector(): String = "ul.list-episode-item li a" + // ============================== Popular =============================== override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/most-popular-drama?page=$page") // page/$page - override fun popularAnimeFromElement(element: Element): SAnime { - val anime = SAnime.create() - anime.setUrlWithoutDomain(element.attr("abs:href")) - anime.thumbnail_url = element.select("img").attr("data-original").replace(" ", "%20") - anime.title = element.select("h3").text() - return anime + override fun popularAnimeSelector(): String = "ul.list-episode-item li a" + + override fun popularAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + thumbnail_url = element.select("img").attr("data-original").replace(" ", "%20") + title = element.select("h3").text() } override fun popularAnimeNextPageSelector(): String = "li.next a" - // Episodes + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/recently-added?page=$page") + + override fun latestUpdatesParse(response: Response): AnimesPage { + val document = response.asJsoup() + + val animes = document.select("ul.switch-block a").map { element -> + val hrefDocument = client.newCall(GET(element.attr("abs:href"))).execute().asJsoup() + SAnime.create().apply { + title = element.select("h3").text() + setUrlWithoutDomain(hrefDocument.select("div.category a").attr("abs:href")) + thumbnail_url = element.select("img").attr("data-original").replace(" ", "%20") + } + } + val hasNextPage = document.select("li.next a").first() != null + + return AnimesPage(animes, hasNextPage) + } + + override fun latestUpdatesSelector(): String = throw Exception("not used") + + override fun latestUpdatesFromElement(element: Element): SAnime = throw Exception("not used") + + override fun latestUpdatesNextPageSelector(): String = throw Exception("not used") + + // =============================== Search =============================== + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = + GET("$baseUrl/search?keyword=$query&page=$page") + + override fun searchAnimeSelector(): String = "ul.list-episode-item li a" + + override fun searchAnimeFromElement(element: Element): SAnime = SAnime.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + thumbnail_url = element.select("img").attr("data-original").replace(" ", "%20") + title = element.select("h3").text() + } + + override fun searchAnimeNextPageSelector(): String = "li.next a" + + // =========================== Anime Details ============================ + + override fun animeDetailsParse(document: Document): SAnime = SAnime.create().apply { + title = document.select("div.img img").attr("alt") + thumbnail_url = document.select("div.img img").attr("src") + description = document.select("div.info p").text().substringAfter("Description: ").substringBefore("Country: ").substringBefore("Director: ").substringBefore("Original Network: ") + author = document.select("div.info p:contains(Original Network) a").text() + genre = document.select("div.info p:contains(Genre) a").joinToString(", ") { it.text() } + status = parseStatus(document.select("div.info p:contains(Status) a").text()) + } + + // ============================== Episodes ============================== + override fun episodeListSelector() = "ul.all-episode li a" override fun episodeFromElement(element: Element): SEpisode { - val episode = SEpisode.create() val epNum = element.select("h3").text().substringAfter("Episode ") - episode.setUrlWithoutDomain(element.attr("abs:href")) - episode.name = element.select("span.type").text() + ": Episode " + element.select("h3").text().substringAfter("Episode ") - episode.episode_number = when { - (epNum.isNotEmpty()) -> epNum.toFloat() - else -> 1F + + return SEpisode.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + name = element.select("span.type").text() + ": Episode " + element.select("h3").text().substringAfter("Episode ") + episode_number = when { + (epNum.isNotEmpty()) -> epNum.toFloat() + else -> 1F + } + date_upload = parseDate(element.select("span.time").text()) } - episode.date_upload = parseDate(element.select("span.time").text()) - return episode } - // Video urls + // ============================ Video Links ============================= + override fun videoListRequest(episode: SEpisode): Request { val document = client.newCall(GET(baseUrl + episode.url)).execute().asJsoup() - val iframe = "https:" + document.select("iframe").attr("src") + val iframe = document.select("iframe").attr("abs:src") return GET(iframe) } @@ -136,126 +191,19 @@ class DramaCool : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoUrlParse(document: Document) = throw Exception("not used") + // ============================= Utilities ============================== + override fun List