diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index d7fbb63bb..e53d8e1c0 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -49,6 +49,7 @@ import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withUIContext import kotlinx.coroutines.DelicateCoroutinesApi import okhttp3.AsyncDns +import okhttp3.Cookie import okhttp3.android.AndroidAsyncDns import okio.Path.Companion.toOkioPath import splitties.arch.room.roomDb @@ -158,6 +159,13 @@ class EhApplication : Application(), ImageLoaderFactory { ) // TODO: Rewrite CronetInterceptor to use android.net.http.HttpEngine and make it Android 14 only when released + addInterceptor { chain -> + val request = chain.request() + val response = chain.proceed(request) + val url = request.url + EhCookieStore.saveFromResponse(url, Cookie.parseAll(url, response.headers)) + response + } addInterceptor(CronetInterceptor.newBuilder(cronetHttpClient).build()) } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt index 63dc95524..108f42bca 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt @@ -60,6 +60,7 @@ object EhCookieStore : CookieJar { fun copyNecessaryCookies() { val cookie = get(EhUrl.HOST_E.toHttpUrl()).filter { it.name == KEY_STAR || it.name == KEY_IPB_MEMBER_ID || it.name == KEY_IPB_PASS_HASH || it.name == KEY_IGNEOUS } cookie.forEach { manager.setCookie(EhUrl.HOST_EX, it.toString()) } + flush() } fun deleteCookie(url: HttpUrl, name: String) { @@ -90,7 +91,7 @@ object EhCookieStore : CookieJar { } // See https://github.com/Ehviewer-Overhauled/Ehviewer/issues/873 - override fun saveFromResponse(url: HttpUrl, cookies: List) = cookies.filterNot { it.name == KEY_UTMP_NAME }.forEach { manager.setCookie(url.toString(), it.toString()) } + override fun saveFromResponse(url: HttpUrl, cookies: List) = cookies.filterNot { it.name == KEY_UTMP_NAME }.forEach { manager.setCookie(url.toString(), it.toString()) }.also { flush() } override fun loadForRequest(url: HttpUrl): List { val checkTips = EhUrl.DOMAIN_E in url.host diff --git a/app/src/main/java/com/hippo/ehviewer/legacy/CookiesMigration.kt b/app/src/main/java/com/hippo/ehviewer/legacy/CookiesMigration.kt index 6da71381c..07a2d5f8b 100644 --- a/app/src/main/java/com/hippo/ehviewer/legacy/CookiesMigration.kt +++ b/app/src/main/java/com/hippo/ehviewer/legacy/CookiesMigration.kt @@ -33,5 +33,6 @@ suspend fun migrateCookies() { database.cookiesDao().list().forEach { EhCookieStore.addCookie(it.toOkHttp3Cookie()) } + EhCookieStore.flush() } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/UConfigScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/UConfigScreen.kt index 137499e9d..c048ff0e9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/UConfigScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/UConfigScreen.kt @@ -80,6 +80,7 @@ fun UConfigScreen() { DisposableEffect(Unit) { onDispose { EhCookieStore.deleteCookie(EhUrl.host.toHttpUrl(), KEY_SETTINGS_PROFILE) + EhCookieStore.flush() } } }