mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 01:19:33 +00:00
change(room members): address PR reviews
This commit is contained in:
+8
@@ -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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-7
@@ -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()
|
||||||
|
|||||||
+13
-13
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user