From e6c4b32a476f240be2aa9d0cd763cc9e3efd248f Mon Sep 17 00:00:00 2001 From: Dude so hot Date: Tue, 29 Oct 2024 23:16:51 +0800 Subject: [PATCH] Use defaultRequest --- .../main/kotlin/com/hippo/ehviewer/Settings.kt | 5 ----- .../hippo/ehviewer/client/EhRequestBuilder.kt | 10 ---------- .../com/hippo/ehviewer/coil/Extensions.kt | 12 ------------ .../kotlin/com/hippo/ehviewer/ktor/Common.kt | 17 +++++++++++++++-- 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index 1d826596c..3b1233b84 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -9,8 +9,6 @@ import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember -import com.hippo.ehviewer.client.CHROME_MOBILE_USER_AGENT -import com.hippo.ehviewer.client.CHROME_USER_AGENT import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.data.FavListUrlBuilder import com.hippo.ehviewer.download.DownloadsFilterMode @@ -212,9 +210,6 @@ object Settings : DataStorePreferences(null) { val showNavigationOverlayOnStart = boolPref("reader_navigation_overlay_on_start", false) val stripExtraneousAds = boolPref("strip_extraneous_ads", false) - val userAgent - get() = if (desktopSite) CHROME_USER_AGENT else CHROME_MOBILE_USER_AGENT - init { if ("CN" == Locale.getDefault().country) { edit { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhRequestBuilder.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhRequestBuilder.kt index c2be43ad9..d296e903d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhRequestBuilder.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhRequestBuilder.kt @@ -15,7 +15,6 @@ */ package com.hippo.ehviewer.client -import com.hippo.ehviewer.BuildConfig import com.hippo.ehviewer.EhApplication.Companion.ktorClient import com.hippo.ehviewer.EhApplication.Companion.noRedirectKtorClient import com.hippo.ehviewer.util.bodyAsUtf8Text @@ -29,7 +28,6 @@ import io.ktor.client.request.setBody import io.ktor.client.statement.HttpResponse import io.ktor.client.statement.HttpStatement import io.ktor.http.ContentType -import io.ktor.http.HttpHeaders import io.ktor.http.HttpMethod import io.ktor.http.ParametersBuilder import io.ktor.http.content.TextContent @@ -54,17 +52,9 @@ inline fun String.parseAs(): T = json.decodeFromString(this) val json = Json { ignoreUnknownKeys = true } -const val CHROME_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${BuildConfig.CHROME_VERSION}.0.0.0 Safari/537.36" -const val CHROME_MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${BuildConfig.CHROME_VERSION}.0.0.0 Mobile Safari/537.36" -const val CHROME_ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" -const val CHROME_ACCEPT_LANGUAGE = "en-US,en;q=0.5" - fun HttpRequestBuilder.applyEhConfig(referer: String?, origin: String?) { - method = HttpMethod.Get header("Referer", referer) header("Origin", origin) - header(HttpHeaders.Accept, CHROME_ACCEPT) - header(HttpHeaders.AcceptLanguage, CHROME_ACCEPT_LANGUAGE) } suspend inline fun ehRequest( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt index 7cc2cdec0..d4633e360 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/coil/Extensions.kt @@ -1,30 +1,19 @@ package com.hippo.ehviewer.coil import coil3.decode.BlackholeDecoder -import coil3.network.NetworkHeaders -import coil3.network.httpHeaders import coil3.request.CachePolicy import coil3.request.ImageRequest import coil3.size.Size -import com.hippo.ehviewer.client.CHROME_ACCEPT -import com.hippo.ehviewer.client.CHROME_ACCEPT_LANGUAGE import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.data.GalleryPreview import com.hippo.ehviewer.client.data.V2GalleryPreview import com.hippo.ehviewer.spider.DownloadInfoMagics.encodeMagicRequestOrUrl -import io.ktor.http.HttpHeaders - -private val header = NetworkHeaders.Builder().apply { - add(HttpHeaders.Accept, CHROME_ACCEPT) - add(HttpHeaders.AcceptLanguage, CHROME_ACCEPT_LANGUAGE) -}.build() fun ImageRequest.Builder.ehUrl(info: GalleryInfo) = apply { val key = info.thumbKey!! data(encodeMagicRequestOrUrl(info)) memoryCacheKey(key) diskCacheKey(key) - httpHeaders(header) } fun ImageRequest.Builder.ehPreview(preview: GalleryPreview) = with(preview) { @@ -32,7 +21,6 @@ fun ImageRequest.Builder.ehPreview(preview: GalleryPreview) = with(preview) { memoryCacheKey(imageKey) diskCacheKey(imageKey) if (preview is V2GalleryPreview) size(Size.ORIGINAL) - httpHeaders(header) } fun ImageRequest.Builder.justDownload() = apply { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ktor/Common.kt b/app/src/main/kotlin/com/hippo/ehviewer/ktor/Common.kt index e1414f4fb..e28aa266e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ktor/Common.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ktor/Common.kt @@ -1,12 +1,21 @@ package com.hippo.ehviewer.ktor -import com.hippo.ehviewer.Settings +import com.hippo.ehviewer.BuildConfig +import com.hippo.ehviewer.Settings.desktopSite import com.hippo.ehviewer.client.EhCookieStore import io.ktor.client.HttpClientConfig import io.ktor.client.engine.HttpClientEngineConfig import io.ktor.client.plugins.HttpTimeout import io.ktor.client.plugins.UserAgent import io.ktor.client.plugins.cookies.HttpCookies +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.request.header +import io.ktor.http.HttpHeaders + +private const val CHROME_ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" +private const val CHROME_ACCEPT_LANGUAGE = "en-US,en;q=0.5" +private const val CHROME_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${BuildConfig.CHROME_VERSION}.0.0.0 Safari/537.36" +private const val CHROME_MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${BuildConfig.CHROME_VERSION}.0.0.0 Mobile Safari/537.36" fun HttpClientConfig.configureCommon() = apply { install(HttpCookies) { @@ -16,6 +25,10 @@ fun HttpClientConfig.configureCommon() = apply { requestTimeoutMillis = 10_000 } install(UserAgent) { - agent = Settings.userAgent + agent = if (desktopSite) CHROME_USER_AGENT else CHROME_MOBILE_USER_AGENT + } + defaultRequest { + header(HttpHeaders.Accept, CHROME_ACCEPT) + header(HttpHeaders.AcceptLanguage, CHROME_ACCEPT_LANGUAGE) } }