[YuriNeko] Fix error interceptor and URL intent filter (#14996)
* fix: return original response if cannot parse as ErrorResponseDto * fix: make YuriNekoUrlActivity not die from lack of kotlin * fix: add trailing slash to referer * accept suggestion Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com> Co-authored-by: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
This commit is contained in:
parent
04f8307fd9
commit
326ddc2ad7
|
@ -12,10 +12,15 @@
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data
|
<data android:host="yurineko.net"
|
||||||
android:host="yurineko.net"
|
|
||||||
android:pathPattern="/..*"
|
|
||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
|
|
||||||
|
<data android:pathPattern="/manga/..*" />
|
||||||
|
<data android:pathPattern="/origin/..*" />
|
||||||
|
<data android:pathPattern="/author/..*" />
|
||||||
|
<data android:pathPattern="/tag/..*" />
|
||||||
|
<data android:pathPattern="/couple/..*" />
|
||||||
|
<data android:pathPattern="/team/..*" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
|
@ -6,7 +6,7 @@ ext {
|
||||||
extName = 'YuriNeko'
|
extName = 'YuriNeko'
|
||||||
pkgNameSuffix = 'vi.yurineko'
|
pkgNameSuffix = 'vi.yurineko'
|
||||||
extClass = '.YuriNeko'
|
extClass = '.YuriNeko'
|
||||||
extVersionCode = 2
|
extVersionCode = 3
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,19 +42,11 @@ class YuriNeko : HttpSource() {
|
||||||
|
|
||||||
override val client = network.cloudflareClient.newBuilder()
|
override val client = network.cloudflareClient.newBuilder()
|
||||||
.rateLimit(3, 1, TimeUnit.SECONDS)
|
.rateLimit(3, 1, TimeUnit.SECONDS)
|
||||||
.addInterceptor { authIntercept(it) }
|
.addInterceptor(::authIntercept)
|
||||||
.addInterceptor { chain ->
|
.addInterceptor(::errorIntercept)
|
||||||
val response = chain.proceed(chain.request())
|
.build()
|
||||||
|
|
||||||
if (response.code >= 400 && response.body != null) {
|
override fun headersBuilder() = Headers.Builder().add("Referer", "$baseUrl/")
|
||||||
val error = response.parseAs<ErrorResponseDto>()
|
|
||||||
response.close()
|
|
||||||
throw IOException("${error.message}\nĐăng nhập qua WebView và thử lại.")
|
|
||||||
}
|
|
||||||
response
|
|
||||||
}.build()
|
|
||||||
|
|
||||||
override fun headersBuilder() = Headers.Builder().add("Referer", baseUrl)
|
|
||||||
|
|
||||||
private fun authIntercept(chain: Interceptor.Chain): Response {
|
private fun authIntercept(chain: Interceptor.Chain): Response {
|
||||||
val request = chain.request()
|
val request = chain.request()
|
||||||
|
@ -70,6 +62,20 @@ class YuriNeko : HttpSource() {
|
||||||
}.build()
|
}.build()
|
||||||
return chain.proceed(authRequest)
|
return chain.proceed(authRequest)
|
||||||
}
|
}
|
||||||
|
private fun errorIntercept(chain: Interceptor.Chain): Response {
|
||||||
|
val response = chain.proceed(chain.request())
|
||||||
|
|
||||||
|
if (response.code >= 400 && response.body != null) {
|
||||||
|
val error = try {
|
||||||
|
response.parseAs<ErrorResponseDto>()
|
||||||
|
} catch (_: Throwable) {
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
response.close()
|
||||||
|
throw IOException("${error.message}\nĐăng nhập qua WebView và thử lại.")
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
override fun popularMangaRequest(page: Int): Request = GET(
|
override fun popularMangaRequest(page: Int): Request = GET(
|
||||||
url = apiUrl.toHttpUrl().newBuilder().apply {
|
url = apiUrl.toHttpUrl().newBuilder().apply {
|
||||||
|
|
|
@ -8,29 +8,26 @@ import android.util.Log
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
class YuriNekoUrlActivity : Activity() {
|
class YuriNekoUrlActivity : Activity() {
|
||||||
private fun prefixDeterminer(path: String): String? = when (path) {
|
|
||||||
"manga" -> YuriNeko.PREFIX_ID_SEARCH
|
|
||||||
"origin" -> YuriNeko.PREFIX_DOUJIN_SEARCH
|
|
||||||
"author" -> YuriNeko.PREFIX_AUTHOR_SEARCH
|
|
||||||
"tag" -> YuriNeko.PREFIX_TAG_SEARCH
|
|
||||||
"couple" -> YuriNeko.PREFIX_COUPLE_SEARCH
|
|
||||||
"team" -> YuriNeko.PREFIX_TEAM_SEARCH
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
val pathSegments = intent?.data?.pathSegments
|
val pathSegments = intent?.data?.pathSegments
|
||||||
if (pathSegments != null &&
|
if (pathSegments != null && pathSegments.size > 1) {
|
||||||
pathSegments.size > 2 &&
|
val id = pathSegments[1]
|
||||||
prefixDeterminer(pathSegments[1]) != null
|
|
||||||
) {
|
|
||||||
val id = pathSegments[2]
|
|
||||||
try {
|
try {
|
||||||
startActivity(
|
startActivity(
|
||||||
Intent().apply {
|
Intent().apply {
|
||||||
action = "eu.kanade.tachiyomi.SEARCH"
|
action = "eu.kanade.tachiyomi.SEARCH"
|
||||||
putExtra("query", "${prefixDeterminer(pathSegments[1])}$id")
|
with(pathSegments[0]) {
|
||||||
|
when {
|
||||||
|
equals("manga") -> putExtra("query", "${YuriNeko.PREFIX_ID_SEARCH}$id")
|
||||||
|
equals("origin") -> putExtra("query", "${YuriNeko.PREFIX_DOUJIN_SEARCH}$id")
|
||||||
|
equals("author") -> putExtra("query", "${YuriNeko.PREFIX_AUTHOR_SEARCH}$id")
|
||||||
|
equals("tag") -> putExtra("query", "${YuriNeko.PREFIX_TAG_SEARCH}$id")
|
||||||
|
equals("couple") -> putExtra("query", "${YuriNeko.PREFIX_COUPLE_SEARCH}$id")
|
||||||
|
equals("team") -> putExtra("query", "${YuriNeko.PREFIX_TEAM_SEARCH}$id")
|
||||||
|
else -> putExtra("query", "${YuriNeko.PREFIX_ID_SEARCH}$id")
|
||||||
|
}
|
||||||
|
}
|
||||||
putExtra("filter", packageName)
|
putExtra("filter", packageName)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue