fix:okhttp自动保存返回的cookie
This commit is contained in:
@@ -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> {
|
||||||
|
|||||||
Reference in New Issue
Block a user