change(room members): address PR reviews

This commit is contained in:
ganfra 2025-11-14 12:27:45 +01:00
parent 0bfa3daf8f
commit 24851f2e32
3 changed files with 32 additions and 20 deletions

View file

@ -65,6 +65,14 @@ class InternalRoomMemberModerationStateProvider : PreviewParameterProvider<Inter
selectedUser = anAlice(), selectedUser = anAlice(),
banUserAsyncAction = AsyncAction.Loading, banUserAsyncAction = AsyncAction.Loading,
), ),
aRoomMembersModerationState(
selectedUser = anAlice(),
unbanUserAsyncAction = AsyncAction.ConfirmingNoParams,
),
aRoomMembersModerationState(
selectedUser = anAlice(),
unbanUserAsyncAction = AsyncAction.Loading,
),
) )
} }

View file

@ -55,6 +55,7 @@ import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
@ -138,13 +139,16 @@ class JoinedRustRoom(
override val liveTimeline = liveInnerTimeline.map(mode = Timeline.Mode.Live) override val liveTimeline = liveInnerTimeline.map(mode = Timeline.Mode.Live)
override val syncUpdateFlow = liveTimeline.onSyncedEventReceived override val syncUpdateFlow = flow {
.map { systemClock.epochMillis() } var counter = 0L
.stateIn( liveTimeline.onSyncedEventReceived.collect {
scope = roomCoroutineScope, emit(++counter)
started = WhileSubscribed(), }
initialValue = systemClock.epochMillis(), }.stateIn(
) scope = roomCoroutineScope,
started = WhileSubscribed(),
initialValue = 0L,
)
init { init {
subscribeToRoomMembersChange() subscribeToRoomMembersChange()

View file

@ -33,22 +33,22 @@ internal class MatrixTimelineDiffProcessor(
Timber.v("Update timeline items from postDiffs (with ${diffs.size} items) on ${Thread.currentThread()}") Timber.v("Update timeline items from postDiffs (with ${diffs.size} items) on ${Thread.currentThread()}")
val result = processDiffs(diffs) val result = processDiffs(diffs)
timelineItems.emit(result.items()) timelineItems.emit(result.items())
if (result.hasNewEventsFromSync()) { if (result.hasNewEventsFromSync) {
syncedEventReceivedFlow.emit(Unit) syncedEventReceivedFlow.emit(Unit)
} }
if (result.hasMembershipChangeEventFromSync()) { if (result.hasMembershipChangeEventFromSync) {
membershipChangeEventReceivedFlow.emit(Unit) membershipChangeEventReceivedFlow.emit(Unit)
} }
} }
} }
private suspend fun processDiffs(diffs: List<TimelineDiff>): DiffingResult { private suspend fun processDiffs(diffs: List<TimelineDiff>): DiffingResult {
val mutableTimelineItems = if (timelineItems.replayCache.isNotEmpty()) { val timelineItems = if (timelineItems.replayCache.isNotEmpty()) {
timelineItems.first().toMutableList() timelineItems.first()
} else { } else {
mutableListOf() emptyList()
} }
val result = DiffingResult(items = mutableTimelineItems) val result = DiffingResult(timelineItems)
diffs.forEach { diff -> diffs.forEach { diff ->
result.applyDiff(diff) result.applyDiff(diff)
} }
@ -107,14 +107,14 @@ internal class MatrixTimelineDiffProcessor(
} }
} }
private class DiffingResult( private class DiffingResult(initialItems: List<MatrixTimelineItem>) {
private val items: MutableList<MatrixTimelineItem>, private val items = initialItems.toMutableList()
private var hasNewEventsFromSync: Boolean = false, var hasNewEventsFromSync: Boolean = false
private var hasMembershipChangeEventFromSync: Boolean = false, private set
) { var hasMembershipChangeEventFromSync: Boolean = false
private set
fun items(): List<MatrixTimelineItem> = items fun items(): List<MatrixTimelineItem> = items
fun hasNewEventsFromSync(): Boolean = hasNewEventsFromSync
fun hasMembershipChangeEventFromSync(): Boolean = hasMembershipChangeEventFromSync
fun add(item: MatrixTimelineItem) { fun add(item: MatrixTimelineItem) {
processItem(item) processItem(item)