From d01574690d1027d493ffcb341311eb7c854c4dd5 Mon Sep 17 00:00:00 2001 From: Arkai1 Date: Sun, 13 Apr 2025 12:02:27 +0530 Subject: [PATCH] Update AnimeKai.kt --- .../animeextension/en/animekai/AnimeKai.kt | 73 +++++++++++++++---- 1 file changed, 60 insertions(+), 13 deletions(-) diff --git a/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/AnimeKai.kt b/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/AnimeKai.kt index 37f45d60..51119ad5 100644 --- a/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/AnimeKai.kt +++ b/src/en/animekai/src/eu/kanade/tachiyomi/animeextension/en/animekai/AnimeKai.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.animeextension.en.animekai import android.util.Base64 +import androidx.preference.ListPreference import eu.kanade.tachiyomi.animesource.AnimeHttpSource import eu.kanade.tachiyomi.animesource.model.* import eu.kanade.tachiyomi.network.GET @@ -15,15 +16,25 @@ import java.security.MessageDigest class AnimeKai : AnimeHttpSource() { + private val PREF_SERVER_KEY = "preferred_server" + private val PREF_SUBTYPE_KEY = "preferred_subtype" + private val PREF_DOMAIN_KEY = "preferred_domain" + + private val defaultServer = "HD-1" + private val defaultSubtype = "sub" + private val defaultDomain = "https://animekai.to" + override val name = "AnimeKai" - override val baseUrl = "https://animekai.to" override val lang = "en" override val supportsLatest = true override val client: OkHttpClient = network.cloudflareClient + override val baseUrl by lazy { + preferences.getString(PREF_DOMAIN_KEY, defaultDomain)!! + } + private val decoder = AnimekaiDecoder() - // Fetches popular anime override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/browser?sort=trending&page=$page", headers) @@ -39,19 +50,16 @@ class AnimeKai : AnimeHttpSource() { return AnimesPage(animeList, true) } - // Fetches latest updates override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/browser?sort=updated_date&status[]=releasing&page=$page", headers) override fun latestUpdatesParse(response: Response): AnimesPage = popularAnimeParse(response) - // Search anime override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = GET("$baseUrl/browser?keyword=$query&page=$page", headers) override fun searchAnimeParse(response: Response): AnimesPage = popularAnimeParse(response) - // Fetch anime details override fun animeDetailsParse(response: Response): SAnime { val document = response.asJsoup() return SAnime.create().apply { @@ -64,14 +72,12 @@ class AnimeKai : AnimeHttpSource() { } } - // Parse status from the text private fun parseStatus(text: String): Int = when { text.contains("Finished", ignoreCase = true) -> SAnime.COMPLETED text.contains("Releasing", ignoreCase = true) -> SAnime.ONGOING else -> SAnime.UNKNOWN } - // Fetch episodes list override fun episodeListParse(response: Response): List { val animeId = response.asJsoup() .selectFirst("div.rate-box")?.attr("data-id") ?: return emptyList() @@ -85,19 +91,21 @@ class AnimeKai : AnimeHttpSource() { SEpisode.create().apply { name = ep.select("span").text().ifEmpty { "Episode ${index + 1}" } episode_number = ep.attr("num").toFloatOrNull() ?: (index + 1).toFloat() - url = ep.attr("token") // Used in videoListParse + url = ep.attr("token") } } } - // Parse video list override fun videoListParse(response: Response): List