Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled
88 lines
2.8 KiB
Kotlin
88 lines
2.8 KiB
Kotlin
package com.rssuper.database
|
|
|
|
import android.content.Context
|
|
import androidx.room.Database
|
|
import androidx.room.Entity
|
|
import androidx.room.Room
|
|
import androidx.room.RoomDatabase
|
|
import androidx.room.TypeConverters
|
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
|
import com.rssuper.converters.DateConverter
|
|
import com.rssuper.converters.FeedItemListConverter
|
|
import com.rssuper.converters.StringListConverter
|
|
import com.rssuper.database.daos.FeedItemDao
|
|
import com.rssuper.database.daos.SearchHistoryDao
|
|
import com.rssuper.database.daos.SubscriptionDao
|
|
import com.rssuper.database.entities.FeedItemEntity
|
|
import com.rssuper.database.entities.SearchHistoryEntity
|
|
import com.rssuper.database.entities.SubscriptionEntity
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import java.util.Date
|
|
|
|
@Database(
|
|
entities = [
|
|
SubscriptionEntity::class,
|
|
FeedItemEntity::class,
|
|
SearchHistoryEntity::class
|
|
],
|
|
version = 1,
|
|
exportSchema = true
|
|
)
|
|
@TypeConverters(DateConverter::class, StringListConverter::class, FeedItemListConverter::class)
|
|
abstract class RssDatabase : RoomDatabase() {
|
|
|
|
abstract fun subscriptionDao(): SubscriptionDao
|
|
abstract fun feedItemDao(): FeedItemDao
|
|
abstract fun searchHistoryDao(): SearchHistoryDao
|
|
|
|
companion object {
|
|
@Volatile
|
|
private var INSTANCE: RssDatabase? = null
|
|
|
|
fun getDatabase(context: Context): RssDatabase {
|
|
return INSTANCE ?: synchronized(this) {
|
|
val instance = Room.databaseBuilder(
|
|
context.applicationContext,
|
|
RssDatabase::class.java,
|
|
"rss_database"
|
|
)
|
|
.addCallback(DatabaseCallback())
|
|
.build()
|
|
INSTANCE = instance
|
|
instance
|
|
}
|
|
}
|
|
}
|
|
|
|
private class DatabaseCallback : RoomDatabase.Callback() {
|
|
override fun onCreate(db: SupportSQLiteDatabase) {
|
|
super.onCreate(db)
|
|
INSTANCE?.let { database ->
|
|
CoroutineScope(Dispatchers.IO).launch {
|
|
createFTSVirtualTable(db)
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onOpen(db: SupportSQLiteDatabase) {
|
|
super.onOpen(db)
|
|
createFTSVirtualTable(db)
|
|
}
|
|
|
|
private fun createFTSVirtualTable(db: SupportSQLiteDatabase) {
|
|
db.execSQL("""
|
|
CREATE VIRTUAL TABLE IF NOT EXISTS feed_items_fts USING fts5(
|
|
title,
|
|
description,
|
|
content,
|
|
author,
|
|
content='feed_items',
|
|
contentless_delete=true
|
|
)
|
|
""".trimIndent())
|
|
}
|
|
}
|
|
}
|