From a21e1225c9500b5f7725a041cd9e47bb25a96759 Mon Sep 17 00:00:00 2001 From: SonoPG <38359416+PGgamer2@users.noreply.github.com> Date: Sat, 25 Jan 2025 01:29:14 +0100 Subject: [PATCH] fix(it/animeworld): 202 redirect proper fix (#582) * Set SecurityAW-gl cookie and update years filter * Update extVersionCode * Create ShittyRedirectionInterceptor.kt * Update extVersionCode * Fix ANIMEWORLD.tv cookies and update Years filter * Don't use headersBuilder Whoops, messed up with GitHub --- src/it/animeworld/build.gradle | 4 +- .../it/animeworld/ANIMEWORLD.kt | 55 +++++-------------- .../ShittyRedirectionInterceptor.kt | 39 +++++++++++++ 3 files changed, 54 insertions(+), 44 deletions(-) create mode 100644 src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ShittyRedirectionInterceptor.kt diff --git a/src/it/animeworld/build.gradle b/src/it/animeworld/build.gradle index 42715c1f..54fc17c4 100644 --- a/src/it/animeworld/build.gradle +++ b/src/it/animeworld/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'ANIMEWORLD.tv' extClass = '.ANIMEWORLD' - extVersionCode = 42 + extVersionCode = 43 } apply from: "$rootDir/common.gradle" @@ -12,4 +12,4 @@ dependencies { implementation(project(':lib:streamhidevid-extractor')) implementation(project(':lib:vidguard-extractor')) implementation "dev.datlag.jsunpacker:jsunpacker:1.0.1" -} \ No newline at end of file +} diff --git a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt index 3a91492c..89253e00 100644 --- a/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt +++ b/src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt @@ -19,7 +19,6 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Request import okhttp3.Response @@ -29,7 +28,6 @@ import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy import java.lang.Exception -import java.util.regex.Pattern class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { @@ -41,10 +39,12 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override val lang = "it" - private var token: String = "" - private var lastTokenRefresh: Long = -1 - override val supportsLatest = true + override val client by lazy { + network.client.newBuilder() + .addInterceptor(ShittyRedirectionInterceptor(network.client)) + .build() + } private val json: Json by injectLazy() @@ -52,42 +52,10 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { Injekt.get().getSharedPreferences("source_$id", 0x0000) } - fun extractCookie(html: String): String? { - val regex = """document\.cookie="([^"]+);""" - val pattern = Pattern.compile(regex) - val matcher = pattern.matcher(html) - - return if (matcher.find()) { - matcher.group(1) // Extract the cookie value - } else { - null - } - } - - fun localGet( - url: String, - headers: Headers? = null, - ): Request { - if (lastTokenRefresh == -1L || System.currentTimeMillis() - lastTokenRefresh > 1000 * 60 * 60 * 24) { - val response = client.newCall(GET(baseUrl)).execute() - val body = response.body!!.string() - val cookie = extractCookie(body) - if (cookie != null) { - token = cookie - lastTokenRefresh = System.currentTimeMillis() - } - } - if (headers == null) { - return GET(url, headers = Headers.headersOf("Cookie", token)) - } - - return GET(url, headers = headers.newBuilder().add("Cookie", token).build()) - } - // Popular Anime - Same Format as Search override fun popularAnimeSelector(): String = searchAnimeSelector() - override fun popularAnimeRequest(page: Int): Request = localGet("$baseUrl/filter?sort=6&page=$page") + override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/filter?sort=6&page=$page") override fun popularAnimeFromElement(element: Element): SAnime = searchAnimeFromElement(element) override fun popularAnimeNextPageSelector(): String = searchAnimeNextPageSelector() @@ -119,7 +87,7 @@ class ANIMEWORLD : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListRequest(episode: SEpisode): Request { val iframe = baseUrl + episode.url - return localGet(iframe) + return GET(iframe) } override fun videoListParse(response: Response): List