fix(de/animeloads): Fix popular animes page (#1819)

This commit is contained in:
Claudemirovsky
2023-07-02 17:35:07 +00:00
committed by GitHub
parent d3571ebfe7
commit 26f748e66e
3 changed files with 3 additions and 93 deletions

View File

@ -6,8 +6,9 @@ ext {
extName = 'Anime-Loads' extName = 'Anime-Loads'
pkgNameSuffix = 'de.animeloads' pkgNameSuffix = 'de.animeloads'
extClass = '.AnimeLoads' extClass = '.AnimeLoads'
extVersionCode = 8 extVersionCode = 9
libVersion = '13' libVersion = '13'
containsNsfw = true
} }
dependencies { dependencies {

View File

@ -54,11 +54,7 @@ class AnimeLoads : ConfigurableAnimeSource, ParsedAnimeHttpSource() {
override fun popularAnimeSelector(): String = "div.row div.col-sm-6 div.panel-body" override fun popularAnimeSelector(): String = "div.row div.col-sm-6 div.panel-body"
override fun popularAnimeRequest(page: Int): Request { override fun popularAnimeRequest(page: Int) = GET("$baseUrl/anime-series/page/$page")
val interceptor = client.newBuilder().addInterceptor(RedirectInterceptor()).build()
interceptor.newCall(GET(baseUrl)).execute().headers
return GET("$baseUrl/anime-series/page/$page")
}
override fun popularAnimeFromElement(element: Element): SAnime { override fun popularAnimeFromElement(element: Element): SAnime {
val anime = SAnime.create() val anime = SAnime.create()

View File

@ -1,87 +0,0 @@
package eu.kanade.tachiyomi.animeextension.de.animeloads
import android.annotation.SuppressLint
import android.app.Application
import android.os.Handler
import android.os.Looper
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
import eu.kanade.tachiyomi.network.GET
import okhttp3.Headers.Companion.toHeaders
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
class RedirectInterceptor : Interceptor {
private val context = Injekt.get<Application>()
private val handler by lazy { Handler(Looper.getMainLooper()) }
override fun intercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request()
val newRequest = resolveWithWebView(originalRequest) ?: throw Exception("bruh")
return chain.proceed(newRequest)
}
@SuppressLint("SetJavaScriptEnabled")
private fun resolveWithWebView(request: Request): Request? {
// We need to lock this thread until the WebView finds the challenge solution url, because
// OkHttp doesn't support asynchronous interceptors.
val latch = CountDownLatch(1)
var webView: WebView? = null
val origRequestUrl = request.url.toString()
val headers = request.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap()
var newRequest: Request? = 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 shouldInterceptRequest(
view: WebView,
request: WebResourceRequest,
): WebResourceResponse? {
if (request.url.toString().contains("/bootstrap/3.3.2/css/bootstrap.min.css")) {
newRequest = GET(origRequestUrl, request.requestHeaders.toHeaders())
latch.countDown()
}
return super.shouldInterceptRequest(view, request)
}
}
webView?.loadUrl(origRequestUrl, headers)
}
// Wait a reasonable amount of time to retrieve the solution. The minimum should be
// around 4 seconds but it can take more due to slow networks or server issues.
latch.await(12, TimeUnit.SECONDS)
handler.post {
webView?.stopLoading()
webView?.destroy()
webView = null
}
return newRequest
}
}