From b3ee69d1936a8f42438f7be7e75193caab2e4fc5 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Mon, 10 Jun 2024 23:42:51 +0800 Subject: [PATCH] Clean up EhCookieStore --- .../com/hippo/ehviewer/client/EhCookieStore.kt | 17 ++++------------- .../ehviewer/ui/login/WebViewSignInScreen.kt | 12 +----------- .../ehviewer/ui/screen/GalleryDetailScreen.kt | 2 +- 3 files changed, 6 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCookieStore.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCookieStore.kt index 54bf12c83..a15331bb6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/EhCookieStore.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/EhCookieStore.kt @@ -1,24 +1,19 @@ package com.hippo.ehviewer.client import android.webkit.CookieManager -import androidx.compose.ui.util.fastAny -import androidx.compose.ui.util.fastJoinToString import io.ktor.client.plugins.cookies.CookiesStorage import io.ktor.http.Cookie import io.ktor.http.Url import io.ktor.http.parseClientCookiesHeader -import io.ktor.http.renderCookieHeader import io.ktor.http.renderSetCookieHeader object EhCookieStore : CookiesStorage { private val manager = CookieManager.getInstance() fun removeAllCookies() = manager.removeAllCookies(null) - fun contains(url: String, name: String) = load(Url(url)).fastAny { it.name == name } - fun hasSignedIn(): Boolean { - val url = EhUrl.HOST_E - return contains(url, KEY_IPB_MEMBER_ID) && contains(url, KEY_IPB_PASS_HASH) - } + fun hasSignedIn(): Boolean = getCookies(EhUrl.HOST_E)?.run { + containsKey(KEY_IPB_MEMBER_ID) && containsKey(KEY_IPB_PASS_HASH) + } ?: false const val KEY_IPB_MEMBER_ID = "ipb_member_id" const val KEY_IPB_PASS_HASH = "ipb_pass_hash" @@ -53,11 +48,7 @@ object EhCookieStore : CookiesStorage { fun flush() = manager.flush() - fun getCookieHeader(url: String): String { - return load(Url(url)).fastJoinToString("; ") { - renderCookieHeader(it) - } - } + fun getCookieHeader(url: String): String? = manager.getCookie(url) // See https://github.com/Ehviewer-Overhauled/Ehviewer/issues/873 override suspend fun addCookie(requestUrl: Url, cookie: Cookie) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt index d3eacc459..9992ab171 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt @@ -22,7 +22,6 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withNonCancellableContext import eu.kanade.tachiyomi.util.lang.withUIContext -import io.ktor.http.Url @Destination @Composable @@ -37,16 +36,7 @@ fun WebViewSignInScreen(navigator: DestinationsNavigator) { view.destroy() return } - var getId = false - var getHash = false - EhCookieStore.load(Url(EhUrl.HOST_E)).forEach { - if (EhCookieStore.KEY_IPB_MEMBER_ID == it.name) { - getId = true - } else if (EhCookieStore.KEY_IPB_PASS_HASH == it.name) { - getHash = true - } - } - if (getId && getHash) { + if (EhCookieStore.hasSignedIn()) { present = true coroutineScope.launchIO { withNonCancellableContext { postLogin() } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt index bd422bbee..ae0c59440 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt @@ -588,7 +588,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: DestinationsNa AppConfig.APP_DIRNAME + "/" + FileUtils.sanitizeFilename(name), ) r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) - r.addRequestHeader("Cookie", EhCookieStore.getCookieHeader(url)) + EhCookieStore.getCookieHeader(url)?.let { r.addRequestHeader("Cookie", it) } downloadManager.enqueue(r) showSnackbar(downloadTorrentStarted) }