[RU]Libmanga/hentai real content type image (#10954)

This commit is contained in:
e-shl 2022-02-28 17:04:05 +05:00 committed by GitHub
parent 2df17713ad
commit 7c566ae604
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 4 deletions

View File

@ -6,7 +6,7 @@ ext {
extName = 'HentaiLib' extName = 'HentaiLib'
pkgNameSuffix = 'ru.libhentai' pkgNameSuffix = 'ru.libhentai'
extClass = '.LibHentai' extClass = '.LibHentai'
extVersionCode = 6 extVersionCode = 7
isNsfw = true isNsfw = true
} }

View File

@ -31,9 +31,12 @@ import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -63,13 +66,25 @@ class LibHentai : ConfigurableSource, HttpSource() {
add("Accept", "image/webp,*/*;q=0.8") add("Accept", "image/webp,*/*;q=0.8")
add("Referer", baseUrl) add("Referer", baseUrl)
} }
private fun imageContentTypeIntercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request()
val response = chain.proceed(originalRequest)
val urlRequest = originalRequest.url.toString()
val possibleType = urlRequest.substringAfterLast("/").split(".")
return if (!urlRequest.contains(baseUrl) and (possibleType.size == 2)) {
val realType = possibleType[1]
val image = response.body?.byteString()?.toResponseBody("image/$realType".toMediaType())
response.newBuilder().body(image).build()
} else
response
}
private val authClient = network.cloudflareClient private val authClient = network.cloudflareClient
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS)
.addNetworkInterceptor(RateLimitInterceptor(3)) .addNetworkInterceptor(RateLimitInterceptor(3))
.addInterceptor { imageContentTypeIntercept(it) }
.addInterceptor { chain -> .addInterceptor { chain ->
val originalRequest = chain.request() val originalRequest = chain.request()
if (originalRequest.url.toString().contains(baseUrl)) if (originalRequest.url.toString().contains(baseUrl))

View File

@ -6,7 +6,7 @@ ext {
extName = 'MangaLib' extName = 'MangaLib'
pkgNameSuffix = 'ru.libmanga' pkgNameSuffix = 'ru.libmanga'
extClass = '.LibManga' extClass = '.LibManga'
extVersionCode = 62 extVersionCode = 63
} }
dependencies { dependencies {

View File

@ -31,9 +31,12 @@ import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import okhttp3.Headers import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import org.jsoup.nodes.Element import org.jsoup.nodes.Element
import rx.Observable import rx.Observable
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -56,11 +59,23 @@ class LibManga : ConfigurableSource, HttpSource() {
override val lang = "ru" override val lang = "ru"
override val supportsLatest = true override val supportsLatest = true
private fun imageContentTypeIntercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request()
val response = chain.proceed(originalRequest)
val urlRequest = originalRequest.url.toString()
val possibleType = urlRequest.substringAfterLast("/").split(".")
return if (!urlRequest.contains(baseUrl) and (possibleType.size == 2)) {
val realType = possibleType[1]
val image = response.body?.byteString()?.toResponseBody("image/$realType".toMediaType())
response.newBuilder().body(image).build()
} else
response
}
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS)
.addNetworkInterceptor(RateLimitInterceptor(3)) .addNetworkInterceptor(RateLimitInterceptor(3))
.addInterceptor { imageContentTypeIntercept(it) }
.build() .build()
private val baseOrig: String = "https://mangalib.me" private val baseOrig: String = "https://mangalib.me"