change(room members): address PR reviews
This commit is contained in:
parent
0bfa3daf8f
commit
24851f2e32
3 changed files with 32 additions and 20 deletions
|
|
@ -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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue