fix:okhttp自动保存返回的cookie

pull/1852/head
Xwite 3 years ago
parent 4618b13289
commit da0e451233
  1. 28
      app/src/main/java/io/legado/app/help/CacheManager.kt
  2. 7
      app/src/main/java/io/legado/app/help/http/CookieStore.kt
  3. 2
      app/src/main/java/io/legado/app/help/http/HttpHelper.kt

@ -11,11 +11,7 @@ import splitties.init.appCtx
object CacheManager { object CacheManager {
private val queryTTFMap = hashMapOf<String, Pair<Long, QueryTTF>>() private val queryTTFMap = hashMapOf<String, Pair<Long, QueryTTF>>()
private val memoryLruCache = object : LruCache<String, Cache>(100) { private val memoryLruCache = object : LruCache<String, String>(100)
override fun sizeOf(key: String, value: Cache): Int {
return 1
}
}
/** /**
* saveTime 单位为秒 * saveTime 单位为秒
@ -29,15 +25,14 @@ object CacheManager {
is ByteArray -> ACache.get(appCtx).put(key, value, saveTime) is ByteArray -> ACache.get(appCtx).put(key, value, saveTime)
else -> { else -> {
val cache = Cache(key, value.toString(), deadline) val cache = Cache(key, value.toString(), deadline)
memoryLruCache.put(key, cache) putMemory(key, value.toString())
appDb.cacheDao.insert(cache) appDb.cacheDao.insert(cache)
} }
} }
} }
fun putMemory(key: String, value: Any) { fun putMemory(key: String, value: String) {
val cache = Cache(key, value.toString(), 0) memoryLruCache.put(key, value)
memoryLruCache.put(key, cache)
} }
fun get(key: String): String? { fun get(key: String): String? {
@ -46,22 +41,15 @@ object CacheManager {
} }
val cache = appDb.cacheDao.get(key) val cache = appDb.cacheDao.get(key)
if (cache != null && (cache.deadline == 0L || cache.deadline > System.currentTimeMillis())) { if (cache != null && (cache.deadline == 0L || cache.deadline > System.currentTimeMillis())) {
memoryLruCache.put(key, cache) putMemory(key, cache.value ?: "")
return cache.value return cache.value
} }
return null return null
} }
//从内存中获取数据 使用lruCache 支持过期功能 //从内存中获取数据 使用lruCache
private fun getFromMemory(key: String): String? { fun getFromMemory(key: String): String? {
val cache = memoryLruCache.get(key) ?: return null return memoryLruCache.get(key)
val deadline = cache.deadline
return if (deadline == 0L || deadline > System.currentTimeMillis()) {
cache.value
} else {
memoryLruCache.remove(key)
null
}
} }
fun getInt(key: String): Int? { fun getInt(key: String): Int? {

@ -6,6 +6,7 @@ import android.text.TextUtils
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.Cookie import io.legado.app.data.entities.Cookie
import io.legado.app.help.http.api.CookieManager import io.legado.app.help.http.api.CookieManager
import io.legado.app.help.CacheManager
import io.legado.app.utils.NetworkUtils import io.legado.app.utils.NetworkUtils
object CookieStore : CookieManager { object CookieStore : CookieManager {
@ -14,6 +15,7 @@ object CookieStore : CookieManager {
*保存cookie到数据库会自动识别url的二级域名 *保存cookie到数据库会自动识别url的二级域名
*/ */
override fun setCookie(url: String, cookie: String?) { override fun setCookie(url: String, cookie: String?) {
CacheManager.putMemory(url, cookie ?: "")
val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "") val cookieBean = Cookie(NetworkUtils.getSubDomain(url), cookie ?: "")
appDb.cookieDao.insert(cookieBean) appDb.cookieDao.insert(cookieBean)
} }
@ -37,8 +39,11 @@ object CookieStore : CookieManager {
*获取url所属的二级域名的cookie *获取url所属的二级域名的cookie
*/ */
override fun getCookie(url: String): String { override fun getCookie(url: String): String {
CacheManager.getFromMemory(url)?.let { return it }
val cookieBean = appDb.cookieDao.get(NetworkUtils.getSubDomain(url)) val cookieBean = appDb.cookieDao.get(NetworkUtils.getSubDomain(url))
return cookieBean?.cookie ?: "" val cookie = cookieBean?.cookie ?: ""
CacheManager.putMemory(url, cookie ?: "")
return cookie
} }
fun getKey(url: String, key: String): String { fun getKey(url: String, key: String): String {

@ -35,7 +35,7 @@ val okHttpClient: OkHttpClient by lazy {
.cookieJar(object : CookieJar { .cookieJar(object : CookieJar {
override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) { override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
cookies.forEach { cookies.forEach {
CookieStore.setCookie(url.toString(), it.value) CookieStore.replaceCookie(url.toString(), "${it.name}=${it.value}")
} }
} }
override fun loadForRequest(url: HttpUrl): List<Cookie> { override fun loadForRequest(url: HttpUrl): List<Cookie> {

Loading…
Cancel
Save