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:
tarsin committed 2023-06-19 10:38:36 +08:00
1 parent 9611d81969
commit cf2796ebaa
3 files changed
+16 -19

No files matched your search

+2
View File
@@ -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 ->