From e2483ddf4760e0c3b6bb69dfa7c5988fdf7edfce Mon Sep 17 00:00:00 2001 From: Samfun75 <38332931+Samfun75@users.noreply.github.com> Date: Fri, 17 Mar 2023 11:01:46 +0300 Subject: [PATCH] fix 9anime vrf stuff (#1399) --- src/en/nineanime/build.gradle | 2 +- .../en/nineanime/JsVrfInterceptor.kt | 99 ------------------- .../animeextension/en/nineanime/NineAnime.kt | 47 +++++---- 3 files changed, 27 insertions(+), 121 deletions(-) delete mode 100644 src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/JsVrfInterceptor.kt diff --git a/src/en/nineanime/build.gradle b/src/en/nineanime/build.gradle index 59c1ca96f..da6ec6892 100644 --- a/src/en/nineanime/build.gradle +++ b/src/en/nineanime/build.gradle @@ -6,7 +6,7 @@ ext { extName = '9anime' pkgNameSuffix = 'en.nineanime' extClass = '.NineAnime' - extVersionCode = 37 + extVersionCode = 38 libVersion = '13' } diff --git a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/JsVrfInterceptor.kt b/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/JsVrfInterceptor.kt deleted file mode 100644 index 8c1cb1cd9..000000000 --- a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/JsVrfInterceptor.kt +++ /dev/null @@ -1,99 +0,0 @@ -package eu.kanade.tachiyomi.animeextension.en.nineanime - -import android.annotation.SuppressLint -import android.app.Application -import android.os.Handler -import android.os.Looper -import android.webkit.WebResourceRequest -import android.webkit.WebView -import android.webkit.WebViewClient -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit - -class JsVrfInterceptor(private val baseUrl: String) { - - private val context = Injekt.get() - private val handler by lazy { Handler(Looper.getMainLooper()) } - private val vrfWebView = createWebView() - - fun getVrf(query: String): String { - if (query.isBlank()) return "" - val jscript = getJs(query) - val cdl = CountDownLatch(1) - var vrf = "" - handler.post { - vrfWebView?.evaluateJavascript(jscript) { - vrf = it?.removeSurrounding("\"") ?: "" - cdl.countDown() - } - } - cdl.await(12, TimeUnit.SECONDS) - if (vrf.isBlank()) throw Exception("vrf could not be retrieved") - return vrf - } - - @SuppressLint("SetJavaScriptEnabled") - private fun createWebView(): WebView? { - val latch = CountDownLatch(1) - var webView: WebView? = null - - handler.post { - val webview = WebView(context) - webView = webview - with(webview.settings) { - javaScriptEnabled = true - domStorageEnabled = true - databaseEnabled = true - useWideViewPort = false - loadWithOverviewMode = false - userAgentString = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" - - webview.webViewClient = object : WebViewClient() { - override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { - if (request?.url.toString().contains("$baseUrl/filter")) { - return super.shouldOverrideUrlLoading(view, request) - } else { - // Block the request - return true - } - } - override fun onPageFinished(view: WebView?, url: String?) { - latch.countDown() - } - } - webView?.loadUrl("$baseUrl/filter") - } - } - - latch.await() - - handler.post { - webView?.stopLoading() - } - return webView - } - - private fun getJs(query: String): String { - return """ - (function() { - document.querySelector("form.filters input.form-control").value = '$query'; - let inputElemente = document.querySelector('form.filters input.form-control'); - let e = document.createEvent('HTMLEvents'); - e.initEvent('keyup', true, true); - inputElemente.dispatchEvent(e); - let val = ""; - while (val == "") { - let element = document.querySelector('form.filters input[type="hidden"]').value; - if (element) { - val = element; - break; - } - } - document.querySelector("form.filters input.form-control").value = ''; - return val; - })(); - """.trimIndent() - } -} diff --git a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt b/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt index cb9ad984b..407d528ec 100644 --- a/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt +++ b/src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/NineAnime.kt @@ -51,8 +51,6 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { private val json: Json by injectLazy() - private val vrfInterceptor by lazy { JsVrfInterceptor(baseUrl) } - private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } @@ -105,10 +103,7 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { throw Exception("Not used") private fun searchAnimeRequest(page: Int, query: String, filters: NineAnimeFilters.FilterSearchParams): Request { - val vrf = (if (query.isNotBlank()) vrfInterceptor.getVrf(query) else "").let { - java.net.URLEncoder.encode(it, "utf-8") - } - + val vrf = if (query.isNotBlank()) callConsumet(query, "searchVrf") else "" var url = "$baseUrl/filter?keyword=$query" if (filters.genre.isNotBlank()) url += filters.genre @@ -121,7 +116,7 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { if (filters.rating.isNotBlank()) url += filters.rating return GET( - "$url&sort=${filters.sort}&$VRF_NAME=$vrf&page=$page", + "$url&sort=${filters.sort}&$vrf&page=$page", headers = Headers.headersOf("Referer", "$baseUrl/"), ) } @@ -162,9 +157,9 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun episodeListRequest(anime: SAnime): Request { val id = client.newCall(GET(baseUrl + anime.url)).execute().asJsoup() .selectFirst("div[data-id]")!!.attr("data-id") - val vrf = java.net.URLEncoder.encode(callConsumet(id, "vrf"), "utf-8") + val vrf = callConsumet(id, "vrf") return GET( - "$baseUrl/ajax/episode/list/$id?$VRF_NAME=$vrf", + "$baseUrl/ajax/episode/list/$id?$vrf", headers = Headers.headersOf("url", anime.url), ) } @@ -201,8 +196,8 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { override fun videoListRequest(episode: SEpisode): Request { val ids = episode.url.substringBefore("&") - val vrf = java.net.URLEncoder.encode(callConsumet(ids, "vrf"), "utf-8") - val url = "/ajax/server/list/$ids?$VRF_NAME=$vrf" + val vrf = callConsumet(ids, "vrf") + val url = "/ajax/server/list/$ids?$vrf" val epurl = episode.url.substringAfter("epurl=") return GET(baseUrl + url, headers = Headers.headersOf("url", epurl)) } @@ -264,10 +259,10 @@ class NineAnime : ConfigurableAnimeSource, ParsedAnimeHttpSource() { } private fun extractVideoConsumet(server: Triple, epUrl: String): List