Add cronet temporarily for testing usage
We temporarily add cronet implementation to test the wrapper stability Drop it when Android 14 release
This commit is contained in:
1 parent
9611d81969
commit
cf2796ebaa
3 files changed
+16
-19
No files matched your search
@@ -248,6 +248,8 @@ dependencies {
|
||||
implementation("io.ktor:ktor-io-jvm:$ktor")
|
||||
implementation("io.ktor:ktor-utils-jvm:$ktor")
|
||||
|
||||
implementation("org.chromium.net:cronet-embedded:113.5672.61")
|
||||
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-cbor:1.5.1")
|
||||
implementation("org.jsoup:jsoup:1.16.1")
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
@file:RequiresExtension(extension = Build.VERSION_CODES.S, version = 7)
|
||||
|
||||
package com.hippo.ehviewer.spider
|
||||
|
||||
import android.net.http.HttpEngine
|
||||
import android.net.http.HttpException
|
||||
import android.net.http.UrlRequest
|
||||
import android.net.http.UrlResponseInfo
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresExtension
|
||||
import com.hippo.ehviewer.EhApplication
|
||||
import io.ktor.utils.io.pool.DirectByteBufferPool
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import org.chromium.net.CronetEngine
|
||||
import org.chromium.net.CronetException
|
||||
import org.chromium.net.UrlRequest
|
||||
import org.chromium.net.UrlResponseInfo
|
||||
import splitties.init.appCtx
|
||||
import java.nio.ByteBuffer
|
||||
import kotlin.coroutines.Continuation
|
||||
@@ -21,11 +17,11 @@ import kotlin.coroutines.resumeWithException
|
||||
|
||||
private val pool = DirectByteBufferPool(32)
|
||||
|
||||
val cronetHttpClient = HttpEngine.Builder(appCtx).apply {
|
||||
setEnableHttp2(true)
|
||||
setEnableBrotli(true)
|
||||
setEnableHttpCache(HttpEngine.Builder.HTTP_CACHE_DISABLED, 0)
|
||||
setEnableQuic(true)
|
||||
val cronetHttpClient: CronetEngine = CronetEngine.Builder(appCtx).apply {
|
||||
enableHttp2(true)
|
||||
enableBrotli(true)
|
||||
enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISABLED, 0)
|
||||
enableQuic(true)
|
||||
}.build()
|
||||
|
||||
val cronetHttpClientExecutor = EhApplication.nonCacheOkHttpClient.dispatcher.executorService
|
||||
@@ -36,7 +32,7 @@ class CronetRequest {
|
||||
lateinit var request: UrlRequest
|
||||
lateinit var daemonCont: Continuation<Boolean>
|
||||
lateinit var readerCont: Continuation<Long>
|
||||
val callback = object : UrlRequest.Callback {
|
||||
val callback = object : UrlRequest.Callback() {
|
||||
override fun onRedirectReceived(p0: UrlRequest, p1: UrlResponseInfo, p2: String) {
|
||||
// No-op
|
||||
}
|
||||
@@ -58,7 +54,7 @@ class CronetRequest {
|
||||
daemonCont.resume(true)
|
||||
}
|
||||
|
||||
override fun onFailed(p0: UrlRequest, p1: UrlResponseInfo?, p2: HttpException) {
|
||||
override fun onFailed(p0: UrlRequest, p1: UrlResponseInfo?, p2: CronetException) {
|
||||
daemonCont.resumeWithException(p2)
|
||||
}
|
||||
|
||||
@@ -72,7 +68,7 @@ class CronetRequest {
|
||||
}
|
||||
|
||||
inline fun cronetRequest(url: String, conf: UrlRequest.Builder.() -> Unit) = CronetRequest().apply {
|
||||
request = cronetHttpClient.newUrlRequestBuilder(url, cronetHttpClientExecutor, callback).apply(conf).build()
|
||||
request = cronetHttpClient.newUrlRequestBuilder(url, callback, cronetHttpClientExecutor).apply(conf).build()
|
||||
}
|
||||
|
||||
suspend infix fun CronetRequest.consumeBodyFully(callback: (UrlResponseInfo, ByteBuffer) -> Unit) = run {
|
||||
|
||||
@@ -19,7 +19,6 @@ import android.graphics.ImageDecoder
|
||||
import android.os.Build
|
||||
import android.os.ParcelFileDescriptor
|
||||
import android.os.ParcelFileDescriptor.MODE_READ_WRITE
|
||||
import android.os.ext.SdkExtensions
|
||||
import com.hippo.ehviewer.EhDB
|
||||
import com.hippo.ehviewer.client.EhUtils.getSuitableTitle
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
@@ -132,13 +131,13 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) {
|
||||
referer: String?,
|
||||
notifyProgress: (Long, Long, Int) -> Unit,
|
||||
): Boolean {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && SdkExtensions.getExtensionVersion(Build.VERSION_CODES.S) >= 7) {
|
||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
val req = cronetRequest(url) {
|
||||
referer?.let { addHeader("Referer", it) }
|
||||
}
|
||||
try {
|
||||
req execute { info ->
|
||||
val headers = info.headers.asMap
|
||||
val headers = info.allHeaders
|
||||
val type = headers["Content-Type"]?.first()?.toMediaType()?.subtype ?: "jpg"
|
||||
val length = headers["Content-Length"]!!.first().toLong()
|
||||
saveResponseMeta(index, type, length) { file ->
|
||||
|
||||
Reference in new issue
Block a user