Sync: use the new SyncIndicator api
This commit is contained in:
parent
f96ba8c183
commit
6f86fca2c2
5 changed files with 49 additions and 15 deletions
|
|
@ -33,6 +33,8 @@ import org.matrix.rustcomponents.sdk.RoomListLoadingStateListener
|
|||
import org.matrix.rustcomponents.sdk.RoomListService
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceState
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceStateListener
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
||||
import timber.log.Timber
|
||||
|
||||
fun RoomList.loadingStateFlow(): Flow<RoomListLoadingState> =
|
||||
|
|
@ -83,6 +85,18 @@ fun RoomListService.stateFlow(): Flow<RoomListServiceState> =
|
|||
}
|
||||
}.buffer(Channel.UNLIMITED)
|
||||
|
||||
fun RoomListService.syncIndicator(): Flow<RoomListServiceSyncIndicator> =
|
||||
mxCallbackFlow {
|
||||
val listener = object : RoomListServiceSyncIndicatorListener {
|
||||
override fun onUpdate(indicator: RoomListServiceSyncIndicator) {
|
||||
trySendBlocking(indicator)
|
||||
}
|
||||
}
|
||||
tryOrNull {
|
||||
syncIndicator(listener)
|
||||
}
|
||||
}.buffer(Channel.UNLIMITED)
|
||||
|
||||
fun RoomListService.roomOrNull(roomId: String): RoomListItem? {
|
||||
return try {
|
||||
room(roomId)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import org.matrix.rustcomponents.sdk.RoomListInput
|
|||
import org.matrix.rustcomponents.sdk.RoomListLoadingState
|
||||
import org.matrix.rustcomponents.sdk.RoomListRange
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceState
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
|
||||
import timber.log.Timber
|
||||
import org.matrix.rustcomponents.sdk.RoomListService as InnerRustRoomListService
|
||||
|
||||
|
|
@ -106,6 +107,15 @@ class RustRoomListService(
|
|||
}
|
||||
}
|
||||
|
||||
override val syncIndicator: StateFlow<RoomListService.SyncIndicator> =
|
||||
innerRoomListService.syncIndicator()
|
||||
.map { it.toSyncIndicator() }
|
||||
.onEach { syncIndicator ->
|
||||
Timber.d("SyncIndicator = $syncIndicator")
|
||||
}
|
||||
.distinctUntilChanged()
|
||||
.stateIn(sessionCoroutineScope, SharingStarted.Eagerly, RoomListService.SyncIndicator.Hide)
|
||||
|
||||
override val state: StateFlow<RoomListService.State> =
|
||||
innerRoomListService.stateFlow()
|
||||
.map { it.toRoomListState() }
|
||||
|
|
@ -134,6 +144,13 @@ private fun RoomListServiceState.toRoomListState(): RoomListService.State {
|
|||
}
|
||||
}
|
||||
|
||||
private fun RoomListServiceSyncIndicator.toSyncIndicator(): RoomListService.SyncIndicator {
|
||||
return when (this) {
|
||||
RoomListServiceSyncIndicator.SHOW -> RoomListService.SyncIndicator.Show
|
||||
RoomListServiceSyncIndicator.HIDE -> RoomListService.SyncIndicator.Hide
|
||||
}
|
||||
}
|
||||
|
||||
private fun org.matrix.rustcomponents.sdk.RoomList.observeEntriesWithProcessor(processor: RoomSummaryListProcessor): Flow<List<RoomListEntriesUpdate>> {
|
||||
return entriesFlow { roomListEntries ->
|
||||
processor.postEntries(roomListEntries)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue