From 3e736bad199626db781b517009fe0e57cdebc2c5 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Thu, 12 May 2022 23:33:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B9=A6=E6=BA=90cookie=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/data/entities/BaseSource.kt | 1 + .../java/io/legado/app/data/entities/BookSource.kt | 2 +- .../java/io/legado/app/data/entities/HttpTTS.kt | 2 ++ .../java/io/legado/app/data/entities/RssSource.kt | 3 +++ .../main/java/io/legado/app/help/http/HttpHelper.kt | 7 ++++++- app/src/main/java/io/legado/app/model/BookCover.kt | 1 + .../io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 13 +++++++++++-- .../ui/book/source/edit/BookSourceEditActivity.kt | 2 +- 8 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt index 45466f2a2..50acc0492 100644 --- a/app/src/main/java/io/legado/app/data/entities/BaseSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BaseSource.kt @@ -21,6 +21,7 @@ interface BaseSource : JsExtensions { var loginUrl: String? // 登录地址 var loginUi: String? // 登录UI var header: String? // 请求头 + var enabledCookieJar: Boolean? //启用cookieJar fun getTag(): String diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 85cf985b0..dc2997f87 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -40,7 +40,7 @@ data class BookSource( var enabledExplore: Boolean = true, // 启用okhttp CookieJAr 自动保存每次请求的cookie @ColumnInfo(defaultValue = "0") - var enabledCookieJar: Boolean = false, + override var enabledCookieJar: Boolean? = false, // 并发率 override var concurrentRate: String? = null, // 请求头 diff --git a/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt b/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt index afcbae9bc..4ad644d73 100644 --- a/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt +++ b/app/src/main/java/io/legado/app/data/entities/HttpTTS.kt @@ -24,6 +24,8 @@ data class HttpTTS( override var loginUrl: String? = null, override var loginUi: String? = null, override var header: String? = null, + @ColumnInfo(defaultValue = "0") + override var enabledCookieJar: Boolean? = false, var loginCheckJs: String? = null, @ColumnInfo(defaultValue = "0") var lastUpdateTime: Long = System.currentTimeMillis() diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 8c3e98d46..dca1fa0ac 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -1,6 +1,7 @@ package io.legado.app.data.entities import android.os.Parcelable +import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey @@ -19,6 +20,8 @@ data class RssSource( var sourceGroup: String? = null, var sourceComment: String? = null, var enabled: Boolean = true, + @ColumnInfo(defaultValue = "0") + override var enabledCookieJar: Boolean? = false, override var concurrentRate: String? = null, //并发率 override var header: String? = null, // 请求头 override var loginUrl: String? = null, // 登录地址 diff --git a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt index c5cb6ea79..e6e1a672f 100644 --- a/app/src/main/java/io/legado/app/help/http/HttpHelper.kt +++ b/app/src/main/java/io/legado/app/help/http/HttpHelper.kt @@ -1,9 +1,11 @@ package io.legado.app.help.http import io.legado.app.constant.AppConst +import io.legado.app.help.CacheManager import io.legado.app.help.config.AppConfig import io.legado.app.help.http.cronet.CronetInterceptor import io.legado.app.help.http.cronet.CronetLoader +import io.legado.app.utils.NetworkUtils import okhttp3.* import java.net.InetSocketAddress import java.net.Proxy @@ -23,7 +25,10 @@ val cookieJar by lazy { override fun saveFromResponse(url: HttpUrl, cookies: List) { cookies.forEach { - CookieStore.replaceCookie(url.toString(), "${it.name}=${it.value}") + //CookieStore.replaceCookie(url.toString(), "${it.name}=${it.value}") + //临时保存 书源启用cookie选项再添加到数据库 + val domain = NetworkUtils.getSubDomain(url.toString()) + CacheManager.putMemory("${domain}_cookieJar", "${it.name}=${it.value}") } } diff --git a/app/src/main/java/io/legado/app/model/BookCover.kt b/app/src/main/java/io/legado/app/model/BookCover.kt index 75fba23de..c91d6cc0b 100644 --- a/app/src/main/java/io/legado/app/model/BookCover.kt +++ b/app/src/main/java/io/legado/app/model/BookCover.kt @@ -150,6 +150,7 @@ object BookCover { override var loginUrl: String? = null, override var loginUi: String? = null, override var header: String? = null, + override var enabledCookieJar: Boolean? = false, ) : BaseSource { override fun getTag(): String { diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index 2802921d5..65c57af4d 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -69,6 +69,7 @@ class AnalyzeUrl( private var retry: Int = 0 private var useWebView: Boolean = false private var webJs: String? = null + private val enabledCookieJar = source?.enabledCookieJar ?: false init { if (!mUrl.isDataUrl()) { @@ -519,11 +520,19 @@ class AnalyzeUrl( } /** - *设置cookie urlOption的优先级大于书源保存的cookie + *设置cookie 优先级 + * urlOption临时cookie > 数据库cookie = okhttp CookieJar保存在内存中的cookie *@param tag 书源url 缺省为传入的url */ private fun setCookie(tag: String?) { - val cookie = CookieStore.getCookie(tag ?: url) + val domain = NetworkUtils.getSubDomain(tag ?: url) + //书源启用保存cookie时 添加内存中的cookie到数据库 + if (enabledCookieJar) { + CacheManager.getFromMemory("${domain}_cookieJar")?.let { + CookieStore.replaceCookie(domain, it) + } + } + val cookie = CookieStore.getCookie(domain) if (cookie.isNotEmpty()) { val cookieMap = CookieStore.cookieToMap(cookie) val customCookieMap = CookieStore.cookieToMap(headerMap["Cookie"] ?: "") diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index a280057f9..9fe743bad 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt @@ -190,7 +190,7 @@ class BookSourceEditActivity : source?.let { binding.cbIsEnable.isChecked = it.enabled binding.cbIsEnableFind.isChecked = it.enabledExplore - binding.cbIsEnableCookie.isChecked = it.enabledCookieJar + binding.cbIsEnableCookie.isChecked = it.enabledCookieJar ?: false binding.spType.setSelection( when (it.bookSourceType) { BookType.file -> 3