| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- package io.legato.kazusa.data
- import android.content.ContentValues
- import android.database.sqlite.SQLiteDatabase
- import androidx.room.AutoMigration
- import androidx.room.Database
- import androidx.room.Room
- import androidx.room.RoomDatabase
- import androidx.sqlite.db.SupportSQLiteDatabase
- import io.legato.kazusa.data.dao.BookChapterDao
- import io.legato.kazusa.data.dao.BookDao
- import io.legato.kazusa.data.dao.BookGroupDao
- import io.legato.kazusa.data.dao.BookSourceDao
- import io.legato.kazusa.data.dao.BookmarkDao
- import io.legato.kazusa.data.dao.CacheDao
- import io.legato.kazusa.data.dao.CookieDao
- import io.legato.kazusa.data.dao.DictRuleDao
- import io.legato.kazusa.data.dao.HttpTTSDao
- import io.legato.kazusa.data.dao.KeyboardAssistsDao
- import io.legato.kazusa.data.dao.ReadRecordDao
- import io.legato.kazusa.data.dao.ReplaceRuleDao
- import io.legato.kazusa.data.dao.RssArticleDao
- import io.legato.kazusa.data.dao.RssReadRecordDao
- import io.legato.kazusa.data.dao.RssSourceDao
- import io.legato.kazusa.data.dao.RssStarDao
- import io.legato.kazusa.data.dao.RuleSubDao
- import io.legato.kazusa.data.dao.SearchBookDao
- import io.legato.kazusa.data.dao.SearchKeywordDao
- import io.legato.kazusa.data.dao.ServerDao
- import io.legato.kazusa.data.dao.TxtTocRuleDao
- import io.legato.kazusa.data.entities.Book
- import io.legato.kazusa.data.entities.BookChapter
- import io.legato.kazusa.data.entities.BookGroup
- import io.legato.kazusa.data.entities.BookSource
- import io.legato.kazusa.data.entities.BookSourcePart
- import io.legato.kazusa.data.entities.Bookmark
- import io.legato.kazusa.data.entities.Cache
- import io.legato.kazusa.data.entities.Cookie
- import io.legato.kazusa.data.entities.DictRule
- import io.legato.kazusa.data.entities.HttpTTS
- import io.legato.kazusa.data.entities.KeyboardAssist
- import io.legato.kazusa.data.entities.ReadRecord
- import io.legato.kazusa.data.entities.ReplaceRule
- import io.legato.kazusa.data.entities.RssArticle
- import io.legato.kazusa.data.entities.RssReadRecord
- import io.legato.kazusa.data.entities.RssSource
- import io.legato.kazusa.data.entities.RssStar
- import io.legato.kazusa.data.entities.RuleSub
- import io.legato.kazusa.data.entities.SearchBook
- import io.legato.kazusa.data.entities.SearchKeyword
- import io.legato.kazusa.data.entities.Server
- import io.legato.kazusa.data.entities.TxtTocRule
- import io.legato.kazusa.help.DefaultData
- import org.intellij.lang.annotations.Language
- import splitties.init.appCtx
- import java.util.Locale
- val appDb by lazy {
- Room.databaseBuilder(appCtx, AppDatabase::class.java, AppDatabase.DATABASE_NAME)
- .fallbackToDestructiveMigrationFrom(false, 1, 2, 3, 4, 5, 6, 7, 8, 9)
- .addMigrations(*DatabaseMigrations.migrations)
- .allowMainThreadQueries()
- .addCallback(AppDatabase.dbCallback)
- .build()
- }
- @Database(
- version = 76,
- exportSchema = true,
- entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class,
- ReplaceRule::class, SearchBook::class, SearchKeyword::class, Cookie::class,
- RssSource::class, Bookmark::class, RssArticle::class, RssReadRecord::class,
- RssStar::class, TxtTocRule::class, ReadRecord::class, HttpTTS::class, Cache::class,
- RuleSub::class, DictRule::class, KeyboardAssist::class, Server::class],
- views = [BookSourcePart::class],
- autoMigrations = [
- AutoMigration(from = 43, to = 44),
- AutoMigration(from = 44, to = 45),
- AutoMigration(from = 45, to = 46),
- AutoMigration(from = 46, to = 47),
- AutoMigration(from = 47, to = 48),
- AutoMigration(from = 48, to = 49),
- AutoMigration(from = 49, to = 50),
- AutoMigration(from = 50, to = 51),
- AutoMigration(from = 51, to = 52),
- AutoMigration(from = 52, to = 53),
- AutoMigration(from = 53, to = 54),
- AutoMigration(from = 54, to = 55, spec = DatabaseMigrations.Migration_54_55::class),
- AutoMigration(from = 55, to = 56),
- AutoMigration(from = 56, to = 57),
- AutoMigration(from = 57, to = 58),
- AutoMigration(from = 58, to = 59),
- AutoMigration(from = 59, to = 60),
- AutoMigration(from = 60, to = 61),
- AutoMigration(from = 61, to = 62),
- AutoMigration(from = 62, to = 63),
- AutoMigration(from = 63, to = 64),
- AutoMigration(from = 64, to = 65, spec = DatabaseMigrations.Migration_64_65::class),
- AutoMigration(from = 65, to = 66),
- AutoMigration(from = 66, to = 67),
- AutoMigration(from = 67, to = 68),
- AutoMigration(from = 68, to = 69),
- AutoMigration(from = 69, to = 70),
- AutoMigration(from = 70, to = 71),
- AutoMigration(from = 71, to = 72),
- AutoMigration(from = 72, to = 73),
- AutoMigration(from = 73, to = 74),
- AutoMigration(from = 74, to = 75),
- AutoMigration(from = 75, to = 76)
- ]
- )
- abstract class AppDatabase : RoomDatabase() {
- abstract val bookDao: BookDao
- abstract val bookGroupDao: BookGroupDao
- abstract val bookSourceDao: BookSourceDao
- abstract val bookChapterDao: BookChapterDao
- abstract val replaceRuleDao: ReplaceRuleDao
- abstract val searchBookDao: SearchBookDao
- abstract val searchKeywordDao: SearchKeywordDao
- abstract val rssSourceDao: RssSourceDao
- abstract val bookmarkDao: BookmarkDao
- abstract val rssArticleDao: RssArticleDao
- abstract val rssStarDao: RssStarDao
- abstract val rssReadRecordDao: RssReadRecordDao
- abstract val cookieDao: CookieDao
- abstract val txtTocRuleDao: TxtTocRuleDao
- abstract val readRecordDao: ReadRecordDao
- abstract val httpTTSDao: HttpTTSDao
- abstract val cacheDao: CacheDao
- abstract val ruleSubDao: RuleSubDao
- abstract val dictRuleDao: DictRuleDao
- abstract val keyboardAssistsDao: KeyboardAssistsDao
- abstract val serverDao: ServerDao
- companion object {
- const val DATABASE_NAME = "legado.db"
- const val BOOK_TABLE_NAME = "books"
- const val BOOK_SOURCE_TABLE_NAME = "book_sources"
- const val RSS_SOURCE_TABLE_NAME = "rssSources"
- val dbCallback = object : Callback() {
- override fun onCreate(db: SupportSQLiteDatabase) {
- db.setLocale(Locale.CHINESE)
- }
- override fun onOpen(db: SupportSQLiteDatabase) {
- @Language("sql")
- val insertBookGroupAllSql = """
- insert into book_groups(groupId, groupName, 'order', show)
- select ${BookGroup.IdAll}, '全部', -10, 1
- where not exists (select * from book_groups where groupId = ${BookGroup.IdAll})
- """.trimIndent()
- db.execSQL(insertBookGroupAllSql)
- @Language("sql")
- val insertBookGroupLocalSql = """
- insert into book_groups(groupId, groupName, 'order', enableRefresh, show)
- select ${BookGroup.IdLocal}, '本地', -9, 0, 1
- where not exists (select * from book_groups where groupId = ${BookGroup.IdLocal})
- """.trimIndent()
- db.execSQL(insertBookGroupLocalSql)
- @Language("sql")
- val insertBookGroupMusicSql = """
- insert into book_groups(groupId, groupName, 'order', show)
- select ${BookGroup.IdAudio}, '音频', -8, 1
- where not exists (select * from book_groups where groupId = ${BookGroup.IdAudio})
- """.trimIndent()
- db.execSQL(insertBookGroupMusicSql)
- @Language("sql")
- val insertBookGroupNetNoneGroupSql = """
- insert into book_groups(groupId, groupName, 'order', show)
- select ${BookGroup.IdNetNone}, '网络未分组', -7, 1
- where not exists (select * from book_groups where groupId = ${BookGroup.IdNetNone})
- """.trimIndent()
- db.execSQL(insertBookGroupNetNoneGroupSql)
- @Language("sql")
- val insertBookGroupLocalNoneGroupSql = """
- insert into book_groups(groupId, groupName, 'order', show)
- select ${BookGroup.IdLocalNone}, '本地未分组', -6, 0
- where not exists (select * from book_groups where groupId = ${BookGroup.IdLocalNone})
- """.trimIndent()
- db.execSQL(insertBookGroupLocalNoneGroupSql)
- @Language("sql")
- val insertBookGroupErrorSql = """
- insert into book_groups(groupId, groupName, 'order', show)
- select ${BookGroup.IdError}, '更新失败', -1, 1
- where not exists (select * from book_groups where groupId = ${BookGroup.IdError})
- """.trimIndent()
- db.execSQL(insertBookGroupErrorSql)
- @Language("sql")
- val upBookSourceLoginUiSql =
- "update book_sources set loginUi = null where loginUi = 'null'"
- db.execSQL(upBookSourceLoginUiSql)
- @Language("sql")
- val upRssSourceLoginUiSql =
- "update rssSources set loginUi = null where loginUi = 'null'"
- db.execSQL(upRssSourceLoginUiSql)
- @Language("sql")
- val upHttpTtsLoginUiSql =
- "update httpTTS set loginUi = null where loginUi = 'null'"
- db.execSQL(upHttpTtsLoginUiSql)
- @Language("sql")
- val upHttpTtsConcurrentRateSql =
- "update httpTTS set concurrentRate = '0' where concurrentRate is null"
- db.execSQL(upHttpTtsConcurrentRateSql)
- db.query("select * from keyboardAssists order by serialNo").use {
- if (it.count == 0) {
- DefaultData.keyboardAssists.forEach { keyboardAssist ->
- val contentValues = ContentValues().apply {
- put("type", keyboardAssist.type)
- put("key", keyboardAssist.key)
- put("value", keyboardAssist.value)
- put("serialNo", keyboardAssist.serialNo)
- }
- db.insert(
- "keyboardAssists",
- SQLiteDatabase.CONFLICT_REPLACE,
- contentValues
- )
- }
- }
- }
- }
- }
- }
- }
|