mirror of
https://github.com/mihonapp/mihon.git
synced 2026-10-16 13:48:09 -07:00
Show a screen while the app migrates after an update
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package mihon.data.database
|
||||
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.Inject
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import mihon.domain.database.repository.DatabaseRepository
|
||||
|
||||
@Inject
|
||||
@SingleIn(AppScope::class)
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DatabaseRepositoryImpl : DatabaseRepository {
|
||||
|
||||
override val isMigrating = MutableStateFlow(false)
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import androidx.sqlite.SQLiteConnection
|
||||
import androidx.sqlite.SQLiteDriver
|
||||
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
|
||||
import androidx.sqlite.execSQL
|
||||
import app.cash.sqldelight.db.QueryResult
|
||||
import app.cash.sqldelight.db.SqlDriver
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConcurrencyModel.MultipleReadersSingleWriter
|
||||
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration
|
||||
@@ -19,6 +20,7 @@ import dev.zacsweers.metro.BindingContainer
|
||||
import dev.zacsweers.metro.ContributesTo
|
||||
import dev.zacsweers.metro.Provides
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
import mihon.data.database.DatabaseRepositoryImpl
|
||||
|
||||
@ContributesTo(AppScope::class)
|
||||
@BindingContainer
|
||||
@@ -30,7 +32,7 @@ object DatabaseBindings {
|
||||
*/
|
||||
@Provides
|
||||
@SingleIn(AppScope::class)
|
||||
fun providesSqlDriver(context: Context): SqlDriver {
|
||||
fun providesSqlDriver(context: Context, databaseRepository: DatabaseRepositoryImpl): SqlDriver {
|
||||
val isLowRam = context.getSystemService<ActivityManager>()?.isLowRamDevice == true
|
||||
return AndroidxSqliteDriver(
|
||||
connectionFactory = object : AndroidxSqliteConnectionFactory {
|
||||
@@ -48,6 +50,14 @@ object DatabaseBindings {
|
||||
isForeignKeyConstraintsEnabled = true,
|
||||
concurrencyModel = MultipleReadersSingleWriter(isWal = true, walCount = if (isLowRam) 1 else 4),
|
||||
),
|
||||
// Runs before the driver compares the schema version, and onOpen once the schema is ready
|
||||
onConfigure = {
|
||||
val version = executePragmaQuery("user_version", { QueryResult.Value(it.apply { next() }.getLong(0)) })
|
||||
databaseRepository.isMigrating.value = version in 1..<Database.Schema.version
|
||||
},
|
||||
onOpen = {
|
||||
databaseRepository.isMigrating.value = false
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user