Skip to content

Commit 50b58a0

Browse files
improvement
1 parent 6327f9d commit 50b58a0

1 file changed

Lines changed: 61 additions & 37 deletions

File tree

AnimeSailProvider/src/main/kotlin/com/animesail/AnimeSailProvider.kt

Lines changed: 61 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -30,77 +30,101 @@ import org.jsoup.Jsoup
3030
import org.jsoup.nodes.Element
3131

3232
class TurnstileInterceptor(private val targetCookie: String = "_as_turnstile") : Interceptor {
33+
3334
@SuppressLint("SetJavaScriptEnabled")
3435
override fun intercept(chain: Interceptor.Chain): Response {
3536
val originalRequest = chain.request()
3637
val url = originalRequest.url.toString()
38+
val domainUrl = "${originalRequest.url.scheme}://${originalRequest.url.host}"
3739
val cookieManager = CookieManager.getInstance()
3840

39-
var currentCookies = cookieManager.getCookie(url) ?: ""
40-
var userAgent = originalRequest.header("User-Agent") ?: ""
41+
cookieManager.setAcceptCookie(true)
4142

42-
var response: Response? = null
43+
var currentCookies = cookieManager.getCookie(domainUrl) ?: ""
44+
var userAgent = originalRequest.header("User-Agent") ?: ""
4345
var needsRefresh = false
46+
var initialResponse: Response? = null
4447

45-
if (!currentCookies.contains(targetCookie)) {
46-
needsRefresh = true
47-
} else {
48+
if (currentCookies.contains(targetCookie)) {
4849
val requestBuilder = originalRequest.newBuilder()
4950
.header("Cookie", currentCookies)
50-
response = chain.proceed(requestBuilder.build())
5151

52-
if (response.code == 403 || response.code == 503) {
52+
initialResponse = chain.proceed(requestBuilder.build())
53+
54+
if (initialResponse.code == 403 || initialResponse.code == 503) {
5355
needsRefresh = true
54-
response.close()
56+
initialResponse.close()
57+
} else {
58+
return initialResponse
5559
}
60+
} else {
61+
needsRefresh = true
5662
}
5763

5864
if (needsRefresh) {
59-
runBlocking(Dispatchers.Main) {
60-
val context = AcraApplication.context
61-
if (context != null) {
62-
val webView = WebView(context)
63-
64-
webView.settings.javaScriptEnabled = true
65-
webView.settings.domStorageEnabled = true
66-
webView.settings.userAgentString = userAgent.ifBlank { webView.settings.userAgentString }
67-
userAgent = webView.settings.userAgentString
68-
69-
webView.webViewClient = object : WebViewClient() {
65+
val context = AcraApplication.context
66+
if (context != null) {
67+
val handler = Handler(Looper.getMainLooper())
68+
var webView: WebView? = null
69+
70+
handler.post {
71+
val newWebView = WebView(context)
72+
webView = newWebView
73+
74+
cookieManager.setAcceptCookie(true)
75+
cookieManager.setAcceptThirdPartyCookies(newWebView, true)
76+
77+
newWebView.settings.apply {
78+
javaScriptEnabled = true
79+
domStorageEnabled = true
80+
databaseEnabled = true
81+
loadWithOverviewMode = true
82+
useWideViewPort = true
83+
userAgentString = userAgent.ifBlank { userAgentString }
84+
}
85+
userAgent = newWebView.settings.userAgentString ?: userAgent
86+
87+
newWebView.webViewClient = object : WebViewClient() {
7088
override fun onPageFinished(view: WebView?, url: String?) {
7189
super.onPageFinished(view, url)
90+
cookieManager.flush()
7291
}
7392
}
7493

75-
cookieManager.setCookie(url, "$targetCookie=; Max-Age=0")
94+
cookieManager.removeAllCookies(null)
95+
cookieManager.flush()
7696

77-
webView.loadUrl(url)
97+
newWebView.loadUrl(url)
98+
}
7899

79-
var attempts = 0
80-
val maxAttempts = 30
81-
while (attempts < maxAttempts) {
82-
delay(1000)
83-
val checkCookies = cookieManager.getCookie(url) ?: ""
84-
if (checkCookies.contains(targetCookie)) {
85-
break
86-
}
87-
attempts++
100+
var attempts = 0
101+
val maxAttempts = 60
102+
while (attempts < maxAttempts) {
103+
Thread.sleep(1000)
104+
val checkCookies = cookieManager.getCookie(domainUrl) ?: ""
105+
if (checkCookies.contains(targetCookie)) {
106+
cookieManager.flush()
107+
break
88108
}
109+
attempts++
110+
}
89111

90-
webView.stopLoading()
91-
webView.destroy()
112+
handler.post {
113+
webView?.stopLoading()
114+
webView?.destroy()
115+
webView = null
92116
}
93117
}
94118

95-
currentCookies = cookieManager.getCookie(url) ?: ""
119+
currentCookies = cookieManager.getCookie(domainUrl) ?: ""
96120
val newRequestBuilder = originalRequest.newBuilder()
97121
.header("User-Agent", userAgent)
98122
.header("Cookie", currentCookies)
99-
100-
response = chain.proceed(newRequestBuilder.build())
123+
124+
return chain.proceed(newRequestBuilder.build())
101125
}
102126

103-
return response ?: chain.proceed(originalRequest)
127+
return initialResponse ?: chain.proceed(originalRequest)
104128
}
105129
}
106130

0 commit comments

Comments
 (0)