diff --git a/app/schemas/com.hippo.ehviewer.network.CookiesDatabase/1.json b/app/schemas/com.hippo.ehviewer.dao.CookiesDatabase/1.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.network.CookiesDatabase/1.json rename to app/schemas/com.hippo.ehviewer.dao.CookiesDatabase/1.json diff --git a/app/schemas/com.hippo.ehviewer.network.CookiesDatabase/2.json b/app/schemas/com.hippo.ehviewer.dao.CookiesDatabase/2.json similarity index 100% rename from app/schemas/com.hippo.ehviewer.network.CookiesDatabase/2.json rename to app/schemas/com.hippo.ehviewer.dao.CookiesDatabase/2.json 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 96b3ea40e..52948dfa2 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt @@ -27,7 +27,7 @@ import java.util.Collections import java.util.regex.Pattern object EhCookieStore : CookieJar { - private val db: CookieDatabase = CookieDatabase(EhApplication.application, "okhttp3-cookie.db") + private val db: CookieDatabase = CookieDatabase(EhApplication.application) private val map: MutableMap = db.allCookies fun signOut() { diff --git a/app/src/main/java/com/hippo/ehviewer/dao/Cookie.kt b/app/src/main/java/com/hippo/ehviewer/dao/Cookie.kt new file mode 100644 index 000000000..fb97b0cc8 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/dao/Cookie.kt @@ -0,0 +1,30 @@ +package com.hippo.ehviewer.dao + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "OK_HTTP_3_COOKIE") +data class Cookie( + @ColumnInfo(name = "NAME") + var name: String, + @ColumnInfo(name = "VALUE") + var value: String, + @ColumnInfo(name = "EXPIRES_AT") + var expiresAt: Long, + @ColumnInfo(name = "DOMAIN") + var domain: String, + @ColumnInfo(name = "PATH") + var path: String, + @ColumnInfo(name = "SECURE") + var secure: Boolean, + @ColumnInfo(name = "HTTP_ONLY") + var httpOnly: Boolean, + @ColumnInfo(name = "PERSISTENT") + var persistent: Boolean, + @ColumnInfo(name = "HOST_ONLY") + var hostOnly: Boolean, + @PrimaryKey + @ColumnInfo(name = "_id") + var id: Long?, +) diff --git a/app/src/main/java/com/hippo/ehviewer/dao/CookiesDao.kt b/app/src/main/java/com/hippo/ehviewer/dao/CookiesDao.kt new file mode 100644 index 000000000..729590a82 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/dao/CookiesDao.kt @@ -0,0 +1,22 @@ +package com.hippo.ehviewer.dao + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update + +@Dao +interface CookiesDao { + @Query("SELECT * FROM OK_HTTP_3_COOKIE") + fun list(): List + + @Delete + fun delete(cookie: Cookie) + + @Insert + fun insert(cookie: Cookie): Long + + @Update + fun update(cookie: Cookie) +} diff --git a/app/src/main/java/com/hippo/ehviewer/dao/EhDatabase.kt b/app/src/main/java/com/hippo/ehviewer/dao/EhDatabase.kt index fc88c6281..025b1c131 100644 --- a/app/src/main/java/com/hippo/ehviewer/dao/EhDatabase.kt +++ b/app/src/main/java/com/hippo/ehviewer/dao/EhDatabase.kt @@ -1,6 +1,7 @@ package com.hippo.ehviewer.dao import android.content.Context +import androidx.room.AutoMigration import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase @@ -21,8 +22,27 @@ abstract class EhDatabase : RoomDatabase() { abstract fun quickSearchDao(): QuickSearchDao } +// 1 -> 2 some nullability changes +@Database( + entities = [Cookie::class], + version = 2, + autoMigrations = [ + AutoMigration( + from = 1, + to = 2, + ), + ], +) +abstract class CookiesDatabase : RoomDatabase() { + abstract fun cookiesDao(): CookiesDao +} + fun buildMainDB(context: Context): EhDatabase { // TODO: Remove allowMainThreadQueries return Room.databaseBuilder(context, EhDatabase::class.java, "eh.db").allowMainThreadQueries() .build() } + +fun buildCookiesDB(context: Context): CookiesDatabase { + return Room.databaseBuilder(context, CookiesDatabase::class.java, "okhttp3-cookie.db").build() +} diff --git a/app/src/main/java/com/hippo/ehviewer/network/CookieDatabase.kt b/app/src/main/java/com/hippo/ehviewer/network/CookieDatabase.kt index 3839b89b2..8b93e00ff 100644 --- a/app/src/main/java/com/hippo/ehviewer/network/CookieDatabase.kt +++ b/app/src/main/java/com/hippo/ehviewer/network/CookieDatabase.kt @@ -16,76 +16,11 @@ package com.hippo.ehviewer.network import android.content.Context -import androidx.room.AutoMigration -import androidx.room.ColumnInfo -import androidx.room.Dao -import androidx.room.Database -import androidx.room.Delete -import androidx.room.Entity -import androidx.room.Insert -import androidx.room.PrimaryKey -import androidx.room.Query -import androidx.room.Room -import androidx.room.RoomDatabase -import androidx.room.Update +import com.hippo.ehviewer.dao.Cookie +import com.hippo.ehviewer.dao.buildCookiesDB import okhttp3.Cookie as OkHttpCookie -@Entity(tableName = "OK_HTTP_3_COOKIE") -class Cookie( - @ColumnInfo(name = "NAME") - var name: String, - @ColumnInfo(name = "VALUE") - var value: String, - @ColumnInfo(name = "EXPIRES_AT") - var expiresAt: Long, - @ColumnInfo(name = "DOMAIN") - var domain: String, - @ColumnInfo(name = "PATH") - var path: String, - @ColumnInfo(name = "SECURE") - var secure: Boolean, - @ColumnInfo(name = "HTTP_ONLY") - var httpOnly: Boolean, - @ColumnInfo(name = "PERSISTENT") - var persistent: Boolean, - @ColumnInfo(name = "HOST_ONLY") - var hostOnly: Boolean, - @PrimaryKey - @ColumnInfo(name = "_id") - var id: Long?, -) - -@Dao -interface CookiesDao { - @Query("SELECT * FROM OK_HTTP_3_COOKIE") - fun list(): List - - @Delete - fun delete(cookie: Cookie) - - @Insert - fun insert(cookie: Cookie): Long - - @Update - fun update(cookie: Cookie) -} - -// 1 -> 2 some nullability changes -@Database( - entities = [Cookie::class], - version = 2, - autoMigrations = [ - AutoMigration( - from = 1, - to = 2, - ), - ], -) -abstract class CookiesDatabase : RoomDatabase() { - abstract fun cookiesDao(): CookiesDao -} - -internal class CookieDatabase(context: Context, name: String) { +class CookieDatabase(context: Context) { private val cookiesList by lazy { val now = System.currentTimeMillis() db.cookiesDao().list().mapNotNull { @@ -95,7 +30,7 @@ internal class CookieDatabase(context: Context, name: String) { } }.toMutableList() } - private val db = Room.databaseBuilder(context, CookiesDatabase::class.java, name).build() + private val db = buildCookiesDB(context) val allCookies by lazy { hashMapOf().also { map -> diff --git a/app/src/main/java/com/hippo/ehviewer/network/CookieSet.kt b/app/src/main/java/com/hippo/ehviewer/network/CookieSet.kt index 4dd916304..4a71de781 100644 --- a/app/src/main/java/com/hippo/ehviewer/network/CookieSet.kt +++ b/app/src/main/java/com/hippo/ehviewer/network/CookieSet.kt @@ -18,7 +18,7 @@ package com.hippo.ehviewer.network import okhttp3.Cookie import okhttp3.HttpUrl -internal class CookieSet { +class CookieSet { private val map: MutableMap = HashMap() /**