[RU]LibGroup imageRequest/imgHeader & icon WebView🌎︎ (#16743)

This commit is contained in:
Eshlender 2023-06-17 07:22:41 +05:00 committed by GitHub
parent 2ada0e9a7e
commit 92866f4def
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 13 deletions

View File

@ -9,7 +9,7 @@ class LibGenerator : ThemeSourceGenerator {
override val themeClass = "LibGroup"
override val baseVersionCode: Int = 20
override val baseVersionCode: Int = 21
override val sources = listOf(
SingleLang("MangaLib", "https://mangalib.me", "ru", overrideVersionCode = 74),

View File

@ -84,23 +84,31 @@ abstract class LibGroup(
throw IOException("HTTP error ${response.code}. Проверьте сайт. Для завершения авторизации необходимо перезапустить приложение с полной остановкой.")
}
if (response.code == 404) {
throw IOException("HTTP error ${response.code}. Проверьте сайт. Попробуйте авторизоваться через WebView и обновите список глав.")
throw IOException("HTTP error ${response.code}. Проверьте сайт. Попробуйте авторизоваться через WebView\uD83C\uDF0E и обновите список глав.")
}
return@addInterceptor response
}
.build()
override fun headersBuilder() = Headers.Builder().apply {
// User-Agent required for authorization through third-party accounts (mobile version for correct display in WebView)
add("User-Agent", "Mozilla/5.0 (Linux; Android 10; SM-G980F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36")
add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
add("Referer", baseUrl)
}
private val userAgentMobile = "Mozilla/5.0 (Linux; Android 10; SM-G980F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36"
private val userAgentRandomizer = "${Random.nextInt().absoluteValue}"
protected var csrfToken: String = ""
override fun headersBuilder() = Headers.Builder().apply {
// User-Agent required for authorization through third-party accounts (mobile version for correct display in WebView)
add("User-Agent", userAgentMobile)
add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
add("Referer", baseUrl)
}
private fun imgHeader() = Headers.Builder().apply {
add("User-Agent", userAgentMobile)
add("Accept", "image/avif,image/webp,*/*")
add("Referer", baseUrl)
}.build()
protected fun catalogHeaders() = Headers.Builder()
.apply {
add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.$userAgentRandomizer")
@ -283,7 +291,7 @@ abstract class LibGroup(
return client.newCall(mangaDetailsRequest(manga))
.asObservable().doOnNext { response ->
if (!response.isSuccessful) {
if (response.code == 404 && response.asJsoup().select(".m-menu__sign-in").isNotEmpty()) throw Exception("HTTP error ${response.code}. Для просмотра 18+ контента необходима авторизация через WebView") else throw Exception("HTTP error ${response.code}")
if (response.code == 404 && response.asJsoup().select(".m-menu__sign-in").isNotEmpty()) throw Exception("HTTP error ${response.code}. Для просмотра 18+ контента необходима авторизация через WebView\uD83C\uDF0E") else throw Exception("HTTP error ${response.code}")
}
}
.map { response ->
@ -296,7 +304,7 @@ abstract class LibGroup(
val document = response.asJsoup()
val rawAgeStop = document.select(".media-short-info .media-short-info__item[data-caution]").text()
if (rawAgeStop == "18+" && document.select(".m-menu__sign-in").isNotEmpty()) {
throw Exception("Для просмотра 18+ контента необходима авторизация через WebView")
throw Exception("Для просмотра 18+ контента необходима авторизация через WebView\uD83C\uDF0E")
}
val redirect = document.html()
if (redirect.contains("paper empty section")) {
@ -332,7 +340,7 @@ abstract class LibGroup(
return client.newCall(mangaDetailsRequest(manga))
.asObservable().doOnNext { response ->
if (!response.isSuccessful) {
if (response.code == 404 && response.asJsoup().select(".m-menu__sign-in").isNotEmpty()) throw Exception("HTTP error ${response.code}. Для просмотра 18+ контента необходима авторизация через WebView") else throw Exception("HTTP error ${response.code}")
if (response.code == 404 && response.asJsoup().select(".m-menu__sign-in").isNotEmpty()) throw Exception("HTTP error ${response.code}. Для просмотра 18+ контента необходима авторизация через WebView\uD83C\uDF0E") else throw Exception("HTTP error ${response.code}")
}
}
.map { response ->
@ -437,7 +445,7 @@ abstract class LibGroup(
val redirect = document.html()
if (!redirect.contains("window.__info")) {
if (redirect.contains("auth-layout")) {
throw Exception("Для просмотра 18+ контента необходима авторизация через WebView")
throw Exception("Для просмотра 18+ контента необходима авторизация через WebView\uD83C\uDF0E")
}
}
@ -487,7 +495,7 @@ abstract class LibGroup(
}
private fun checkImage(url: String): Boolean {
val response = client.newCall(Request.Builder().url(url).headers(headers).build()).execute()
val response = client.newCall(Request.Builder().url(url).headers(imgHeader()).build()).execute()
return response.isSuccessful && (response.header("content-length", "0")?.toInt()!! > 600)
}
@ -506,6 +514,10 @@ abstract class LibGroup(
override fun imageUrlParse(response: Response): String = ""
override fun imageRequest(page: Page): Request {
return GET(page.imageUrl!!, imgHeader())
}
// Workaround to allow "Open in browser" use the
private fun searchMangaByIdRequest(id: String): Request {
return GET("$baseUrl/$id", headers)