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

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

View File

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