From b954417a98630049a26854266e138e22ef7b4c8a Mon Sep 17 00:00:00 2001 From: CursedSheep Date: Sat, 18 Jan 2025 20:13:35 +0800 Subject: [PATCH] Revert back from using Session Id to Anime Id (#564) * Improve KwikExtractor Decrypt Function - Optimize and improve performance of KwikExtractor decrypt functionality * Fix issue #550 * Update version * Improve solution for #550 - Revert back to using Anime Id instead of Session Id - Improve `fetchSession` by resolving anime using Anime Id only * Fix lint error --- src/en/animepahe/build.gradle | 2 +- .../animeextension/en/animepahe/AnimePahe.kt | 31 ++++++++++++++----- .../en/animepahe/dto/AnimePaheDto.kt | 2 -- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/en/animepahe/build.gradle b/src/en/animepahe/build.gradle index 732be294..986c0de4 100644 --- a/src/en/animepahe/build.gradle +++ b/src/en/animepahe/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'AnimePahe' extClass = '.AnimePahe' - extVersionCode = 28 + extVersionCode = 29 } 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 44672a28..c85d1679 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 @@ -19,6 +19,9 @@ import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup import eu.kanade.tachiyomi.util.parseAs +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import okhttp3.Headers import okhttp3.Request @@ -64,7 +67,15 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { * @see episodeListRequest */ override fun animeDetailsRequest(anime: SAnime): Request { - val session = anime.getSession() + val animeId = anime.getId() + // We're using coroutines here to run it inside another thread and + // prevent android.os.NetworkOnMainThreadException when trying to open + // webview or share it. + val session = runBlocking { + withContext(Dispatchers.IO) { + fetchSession(animeId) + } + } return GET("$baseUrl/anime/$session") } @@ -95,8 +106,8 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { SAnime.create().apply { title = anime.title thumbnail_url = anime.snapshot - val sessionId = anime.anime_session - setUrlWithoutDomain("/anime/?session_id=$sessionId") + val animeId = anime.id + setUrlWithoutDomain("/anime/?anime_id=$animeId") artist = anime.fansub } } @@ -113,8 +124,8 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { SAnime.create().apply { title = anime.title thumbnail_url = anime.poster - val sessionId = anime.session - setUrlWithoutDomain("/anime/?session_id=$sessionId") + val animeId = anime.id + setUrlWithoutDomain("/anime/?anime_id=$animeId") } } return AnimesPage(animeList, false) @@ -135,7 +146,7 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { * @see animeDetailsRequest */ override fun episodeListRequest(anime: SAnime): Request { - val session = anime.getSession() + val session = fetchSession(anime.getId()) return GET("$baseUrl/api?m=release&id=$session&sort=episode_desc&page=1") } @@ -299,6 +310,12 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { } // ============================= Utilities ============================== + private fun fetchSession(animeId: String): String { + val resolveAnimeRequest = client.newCall(GET("$baseUrl/a/$animeId")).execute() + val sessionId = resolveAnimeRequest.request.url.pathSegments.last() + return sessionId + } + private fun parseStatus(statusString: String): Int { return when (statusString) { "Currently Airing" -> SAnime.ONGOING @@ -307,7 +324,7 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { } } - private fun SAnime.getSession() = url.substringAfterLast("?session_id=").substringBefore("\"") + private fun SAnime.getId() = url.substringAfterLast("?anime_id=").substringBefore("\"") private fun String.toDate(): Long { return runCatching { diff --git a/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/dto/AnimePaheDto.kt b/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/dto/AnimePaheDto.kt index c2ab2410..2adcd2f7 100644 --- a/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/dto/AnimePaheDto.kt +++ b/src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/dto/AnimePaheDto.kt @@ -23,7 +23,6 @@ data class LatestAnimeDto( @SerialName("anime_id") val id: Int, val fansub: String, - val anime_session: String, ) @Serializable @@ -31,7 +30,6 @@ data class SearchResultDto( val title: String, val poster: String, val id: Int, - val session: String, ) @Serializable