From b4acb06665d04a9dea009fcfd5e217ce541ae800 Mon Sep 17 00:00:00 2001 From: tarsin Date: Thu, 2 Mar 2023 15:53:59 +0800 Subject: [PATCH] Refactor to support general cookies --- .../java/com/hippo/network/CookieDatabase.kt | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/hippo/network/CookieDatabase.kt b/app/src/main/java/com/hippo/network/CookieDatabase.kt index 984638cb9..75c5d57da 100644 --- a/app/src/main/java/com/hippo/network/CookieDatabase.kt +++ b/app/src/main/java/com/hippo/network/CookieDatabase.kt @@ -75,7 +75,7 @@ abstract class CookiesDatabase : RoomDatabase() { } internal class CookieDatabase(context: Context, name: String) { - private val cookieIdMap: MutableMap = HashMap() + private val cookiesList = mutableListOf() private val db = Room.databaseBuilder(context, CookiesDatabase::class.java, name).build() val allCookies by lazy { @@ -87,7 +87,7 @@ internal class CookieDatabase(context: Context, name: String) { toRemove.add(it.id!!) } else { val okhttpCookie = it.toOkHttp3Cookie() - cookieIdMap[okhttpCookie] = it.id!! + cookiesList.add(it) val set = map[it.domain] ?: CookieSet().apply { map[it.domain] = this } set.add(okhttpCookie) } @@ -104,26 +104,33 @@ internal class CookieDatabase(context: Context, name: String) { map } + private fun findCookieWithOkHttpCookies(cookie: OkHttpCookie): Cookie? { + return cookiesList.find { it.name == cookie.name && it.domain == cookie.domain && it.value == cookie.value } + } + fun add(cookie: OkHttpCookie) { - db.cookiesDao().insert(cookie.toCookie()).apply { cookieIdMap[cookie] = this } + val c = cookie.toCookie() + c.id = db.cookiesDao().insert(c) + cookiesList.add(c) } fun update(from: OkHttpCookie, to: OkHttpCookie) { - val id = cookieIdMap[from] ?: return - db.cookiesDao().update(to.toCookie(id)) - cookieIdMap.remove(from) - cookieIdMap[to] = id + val origin = findCookieWithOkHttpCookies(from) ?: return + val new = to.toCookie(origin.id) + cookiesList.remove(origin) + cookiesList.add(new) + db.cookiesDao().update(new) } fun remove(cookie: OkHttpCookie) { - val id = cookieIdMap[cookie] ?: return - db.cookiesDao().delete(cookie.toCookie(id)) - cookieIdMap.remove(cookie) + val origin = findCookieWithOkHttpCookies(cookie) ?: return + db.cookiesDao().delete(origin) + cookiesList.remove(origin) } fun clear() { db.clearAllTables() - cookieIdMap.clear() + cookiesList.clear() } }