From c9e400d9fbf3aa54fda300f967516a6aba4e6eae Mon Sep 17 00:00:00 2001 From: jmir1 Date: Fri, 24 Sep 2021 19:04:54 +0200 Subject: [PATCH] animepahe improvements * lazy initializer for baseUrl * sub/dub preference --- src/en/animepahe/build.gradle | 7 +- .../animeextension/en/animepahe/AnimePahe.kt | 90 ++++++++++++++----- 2 files changed, 75 insertions(+), 22 deletions(-) diff --git a/src/en/animepahe/build.gradle b/src/en/animepahe/build.gradle index dff84e608..e707770dc 100644 --- a/src/en/animepahe/build.gradle +++ b/src/en/animepahe/build.gradle @@ -5,8 +5,13 @@ ext { extName = 'AnimePahe' pkgNameSuffix = 'en.animepahe' extClass = '.AnimePahe' - extVersionCode = 6 + extVersionCode = 7 libVersion = '12' } +dependencies { + ext.coroutinesVersion = "1.4.3" + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") +} + apply from: "$rootDir/common.gradle" diff --git a/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/AnimePahe.kt b/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/AnimePahe.kt index 221042714..67ac04ecf 100644 --- a/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/AnimePahe.kt +++ b/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/AnimePahe.kt @@ -5,6 +5,7 @@ import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import com.google.gson.JsonElement +import com.google.gson.JsonNull import com.google.gson.JsonObject import com.google.gson.JsonParser import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource @@ -17,6 +18,9 @@ import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext import okhttp3.FormBody import okhttp3.Headers import okhttp3.OkHttpClient @@ -37,7 +41,7 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { override val name = "AnimePahe" - override val baseUrl = preferences.getString("preferred_domain", "https://animepahe.com")!! + override val baseUrl by lazy { preferences.getString("preferred_domain", "https://animepahe.com")!! } override val lang = "en" @@ -65,15 +69,33 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { override val client: OkHttpClient = network.cloudflareClient + override fun animeDetailsRequest(anime: SAnime): Request { + val responseString = runBlocking { + withContext(Dispatchers.IO) { + client.newCall(GET("$baseUrl/api?m=search&q=${anime.title}")) + .execute().body!!.string() + } + } + val animeId = anime.url.substringAfterLast("?anime_id=") + val session = responseString.substringAfter("\"id\":$animeId") + .substringAfter("\"session\":\"").substringBefore("\"") + return GET("$baseUrl/anime/$session?anime_id=$animeId") + } + override fun animeDetailsParse(response: Response): SAnime { val jsoup = response.asJsoup() val anime = SAnime.create() + anime.setUrlWithoutDomain(response.request.url.toString()) anime.title = jsoup.selectFirst("div.title-wrapper h1").text() - anime.author = jsoup.selectFirst("div.col-sm-4.anime-info p:contains(Studio:)").text().replace("Studio: ", "") + anime.author = jsoup.select("div.col-sm-4.anime-info p:contains(Studio:)") + .firstOrNull()?.text()?.replace("Studio: ", "") anime.status = parseStatus(jsoup.selectFirst("div.col-sm-4.anime-info p:contains(Status:) a").text()) anime.thumbnail_url = jsoup.selectFirst("div.anime-poster a").attr("href") anime.genre = jsoup.select("div.anime-genre ul li").joinToString { it.text() } - anime.description = jsoup.select("div.anime-summary").text() + val synonyms = jsoup.select("div.col-sm-4.anime-info p:contains(Synonyms:)") + .firstOrNull()?.text() + anime.description = jsoup.select("div.anime-summary").text() + + if (synonyms.isNullOrEmpty()) "" else "\n\n$synonyms" return anime } @@ -195,36 +217,46 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { val array = JsonParser.parseString(response.body!!.string()) .asJsonObject.get("data").asJsonArray val videos = mutableListOf