change(room members): address PR reviews
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user