From 4da99feaa34b64e80f5b98a1f359fc7d0e1a41d2 Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:08:45 -0300 Subject: [PATCH] AnimePahe: Fix broken library URLs (#1397) * Fix: add support to old animepahe URLs * chore: bump version --- src/en/animepahe/build.gradle | 2 +- .../animeextension/en/animepahe/AnimePahe.kt | 26 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/en/animepahe/build.gradle b/src/en/animepahe/build.gradle index 6acd8ae8d..8159ca87c 100644 --- a/src/en/animepahe/build.gradle +++ b/src/en/animepahe/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'AnimePahe' pkgNameSuffix = 'en.animepahe' extClass = '.AnimePahe' - extVersionCode = 21 + extVersionCode = 22 libVersion = '13' } 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 1df36a831..cdca6e8dd 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 @@ -52,6 +52,16 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { override val client: OkHttpClient = network.cloudflareClient // =========================== Anime Details ============================ + override fun animeDetailsRequest(anime: SAnime): Request { + return if (anime.getSession().isBlank()) { + val animeId = anime.getId() + val session = fetchSession(anime.title, animeId) + return GET("$baseUrl/anime/$session?anime_id=$animeId") + } else { + super.animeDetailsRequest(anime) + } + } + override fun animeDetailsParse(response: Response): SAnime { val document = response.use { it.asJsoup() } return SAnime.create().apply { @@ -117,7 +127,9 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { // ============================== Episodes ============================== override fun episodeListRequest(anime: SAnime): Request { - val session = anime.url.substringBefore("?anime_id=").substringAfterLast("/") + val session = anime.getSession().ifEmpty { + fetchSession(anime.title, anime.getId()) + } return GET("$baseUrl/api?m=release&id=$session&sort=episode_desc&page=1") } @@ -262,6 +274,15 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { } // ============================= Utilities ============================== + private fun fetchSession(title: String, animeId: String): String { + return client.newCall(GET("$baseUrl/api?m=search&q=$title")) + .execute() + .use { it.body.string() } + .substringAfter("\"id\":$animeId") + .substringAfter("\"session\":\"") + .substringBefore("\"") + } + private fun parseStatus(statusString: String): Int { return when (statusString) { "Currently Airing" -> SAnime.ONGOING @@ -270,6 +291,9 @@ class AnimePahe : ConfigurableAnimeSource, AnimeHttpSource() { } } + private fun SAnime.getSession() = url.substringBefore("?anime_id=").substringAfterLast("/") + private fun SAnime.getId() = url.substringAfterLast("?anime_id=").substringBefore("\"") + private fun String.toDate(): Long { return runCatching { DATE_FORMATTER.parse(this)?.time ?: 0L