mirror of
https://github.com/mihonapp/mihon.git
synced 2026-10-16 13:48:09 -07:00
Configure database connections like Room
This commit is contained in:
@@ -1,12 +1,20 @@
|
||||
package tachiyomi.data
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.content.Context
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.sqlite.SQLiteConnection
|
||||
import androidx.sqlite.SQLiteDriver
|
||||
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
|
||||
import androidx.sqlite.execSQL
|
||||
import app.cash.sqldelight.db.SqlDriver
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConcurrencyModel.MultipleReadersSingleWriter
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConnectionFactory
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver
|
||||
import com.eygraber.sqldelight.androidx.driver.FileProvider
|
||||
import com.eygraber.sqldelight.androidx.driver.SqliteJournalMode
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.BindingContainer
|
||||
import dev.zacsweers.metro.ContributesTo
|
||||
@@ -17,15 +25,30 @@ import dev.zacsweers.metro.SingleIn
|
||||
@BindingContainer
|
||||
object DatabaseBindings {
|
||||
|
||||
/**
|
||||
* Configured like Room's connection manager: WAL unless the device is low on RAM, one writer with four
|
||||
* readers (one in TRUNCATE mode), and a busy timeout on every connection.
|
||||
*/
|
||||
@Provides
|
||||
@SingleIn(AppScope::class)
|
||||
fun providesSqlDriver(context: Context): SqlDriver {
|
||||
val isWal = context.getSystemService<ActivityManager>()?.isLowRamDevice ?: true
|
||||
return AndroidxSqliteDriver(
|
||||
driver = BundledSQLiteDriver(),
|
||||
connectionFactory = object : AndroidxSqliteConnectionFactory {
|
||||
override val driver: SQLiteDriver = BundledSQLiteDriver()
|
||||
|
||||
override fun createConnection(name: String): SQLiteConnection {
|
||||
return driver.open(name).apply {
|
||||
execSQL("PRAGMA busy_timeout = 3000")
|
||||
}
|
||||
}
|
||||
},
|
||||
databaseType = AndroidxSqliteDatabaseType.FileProvider(context, "tachiyomi.db"),
|
||||
schema = Database.Schema,
|
||||
configuration = AndroidxSqliteConfiguration(
|
||||
isForeignKeyConstraintsEnabled = true,
|
||||
journalMode = if (isWal) SqliteJournalMode.WAL else SqliteJournalMode.Truncate,
|
||||
concurrencyModel = MultipleReadersSingleWriter(isWal = isWal, nonWalCount = 1, walCount = 4),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user