Skip to content

Commit

Permalink
refactor: revert back to simpler createVersionFlow() logic
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeyls committed Feb 6, 2025
1 parent 8339b76 commit 78e2548
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 19 deletions.
8 changes: 6 additions & 2 deletions app/src/main/java/be/digitalia/fosdem/db/BookmarksDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ import be.digitalia.fosdem.db.entities.Bookmark
import be.digitalia.fosdem.db.entities.EventEntity
import be.digitalia.fosdem.model.AlarmInfo
import be.digitalia.fosdem.model.Event
import be.digitalia.fosdem.utils.BackgroundWorkScope
import kotlinx.coroutines.flow.Flow
import java.time.Instant

@Dao
abstract class BookmarksDao(appDatabase: AppDatabase) {
val version: Flow<Int> =
appDatabase.createVersionFlow(EventEntity.TABLE_NAME, Bookmark.TABLE_NAME)
val version: Flow<Int> = appDatabase.createVersionFlow(
BackgroundWorkScope,
EventEntity.TABLE_NAME,
Bookmark.TABLE_NAME
)

/**
* Returns the bookmarks.
Expand Down
29 changes: 13 additions & 16 deletions app/src/main/java/be/digitalia/fosdem/db/RoomDatabaseExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,19 @@ package be.digitalia.fosdem.db

import androidx.room.RoomDatabase
import androidx.room.invalidationTrackerFlow
import be.digitalia.fosdem.utils.BackgroundWorkScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch

fun RoomDatabase.createVersionFlow(vararg tables: String): Flow<Int> {
return flow {
var version = 0
invalidationTrackerFlow(*tables).collect {
emit(version++)
fun RoomDatabase.createVersionFlow(scope: CoroutineScope, vararg tables: String): StateFlow<Int> {
val versionFlow = MutableStateFlow(0)
scope.launch {
invalidationTrackerFlow(tables = tables, emitInitialState = false).collect {
versionFlow.update { it + 1 }
}
}.stateIn(
scope = BackgroundWorkScope,
started = SharingStarted.Eagerly,
initialValue = null
).filterNotNull()
}
return versionFlow.asStateFlow()
}
2 changes: 1 addition & 1 deletion app/src/main/java/be/digitalia/fosdem/db/ScheduleDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import java.time.Instant
@Dao
abstract class ScheduleDao(private val appDatabase: AppDatabase) {
val version: Flow<Int> =
appDatabase.createVersionFlow(EventEntity.TABLE_NAME)
appDatabase.createVersionFlow(BackgroundWorkScope, EventEntity.TABLE_NAME)
val bookmarksVersion: Flow<Int>
get() = appDatabase.bookmarksDao.version
val databaseVersion
Expand Down

0 comments on commit 78e2548

Please sign in to comment.