Improve flows.
This commit is contained in:
parent
e797e5f154
commit
188937deb6
2 changed files with 19 additions and 20 deletions
|
|
@ -20,14 +20,15 @@ import org.matrix.rustcomponents.sdk.MessageFormat
|
||||||
import org.matrix.rustcomponents.sdk.MessageType
|
import org.matrix.rustcomponents.sdk.MessageType
|
||||||
import org.matrix.rustcomponents.sdk.TimelineKey
|
import org.matrix.rustcomponents.sdk.TimelineKey
|
||||||
|
|
||||||
class MessageTimelineItemStateMapper(
|
class MessageTimelineItemStateFactory(
|
||||||
private val client: MatrixClient,
|
private val client: MatrixClient,
|
||||||
private val room: MatrixRoom,
|
private val room: MatrixRoom,
|
||||||
private val dispatcher: CoroutineDispatcher,
|
private val dispatcher: CoroutineDispatcher,
|
||||||
) {
|
) {
|
||||||
var highlightedEventId: String? = null
|
suspend fun create(
|
||||||
|
timelineItems: List<MatrixTimelineItem>,
|
||||||
suspend fun map(timelineItems: List<MatrixTimelineItem>): List<MessagesTimelineItemState> =
|
highlightedEventId: String? = null,
|
||||||
|
): List<MessagesTimelineItemState> =
|
||||||
withContext(dispatcher) {
|
withContext(dispatcher) {
|
||||||
val messagesTimelineItemState = ArrayList<MessagesTimelineItemState>()
|
val messagesTimelineItemState = ArrayList<MessagesTimelineItemState>()
|
||||||
for (index in timelineItems.indices.reversed()) {
|
for (index in timelineItems.indices.reversed()) {
|
||||||
|
|
@ -28,7 +28,7 @@ class MessagesViewModel(
|
||||||
private val client: MatrixClient,
|
private val client: MatrixClient,
|
||||||
private val room: MatrixRoom,
|
private val room: MatrixRoom,
|
||||||
private val timeline: MatrixTimeline,
|
private val timeline: MatrixTimeline,
|
||||||
private val messageTimelineItemStateMapper: MessageTimelineItemStateMapper,
|
private val messageTimelineItemStateFactory: MessageTimelineItemStateFactory,
|
||||||
private val initialState: MessagesViewState
|
private val initialState: MessagesViewState
|
||||||
) :
|
) :
|
||||||
MavericksViewModel<MessagesViewState>(initialState) {
|
MavericksViewModel<MessagesViewState>(initialState) {
|
||||||
|
|
@ -42,13 +42,13 @@ class MessagesViewModel(
|
||||||
val matrix = MatrixInstance.getInstance()
|
val matrix = MatrixInstance.getInstance()
|
||||||
val client = matrix.activeClient()
|
val client = matrix.activeClient()
|
||||||
val room = client.getRoom(state.roomId) ?: return null
|
val room = client.getRoom(state.roomId) ?: return null
|
||||||
val messageTimelineItemStateMapper =
|
val messageTimelineItemStateFactory =
|
||||||
MessageTimelineItemStateMapper(client, room, Dispatchers.Default)
|
MessageTimelineItemStateFactory(client, room, Dispatchers.Default)
|
||||||
return MessagesViewModel(
|
return MessagesViewModel(
|
||||||
client,
|
client,
|
||||||
room,
|
room,
|
||||||
room.timeline(),
|
room.timeline(),
|
||||||
messageTimelineItemStateMapper,
|
messageTimelineItemStateFactory,
|
||||||
state
|
state
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -191,20 +191,18 @@ class MessagesViewModel(
|
||||||
|
|
||||||
combine(
|
combine(
|
||||||
timeline.timelineItems(),
|
timeline.timelineItems(),
|
||||||
stateFlow
|
stateFlow.map {
|
||||||
.map { it.composerMode }
|
when (it.composerMode) {
|
||||||
.distinctUntilChanged()
|
is MessageComposerMode.Normal -> null
|
||||||
) { timelineItems, messageComposerMode ->
|
is MessageComposerMode.Edit -> it.composerMode.eventId
|
||||||
// Set the highlightedEventId to messageTimelineItemStateMapper, before the mapping occurs
|
is MessageComposerMode.Quote -> null
|
||||||
messageTimelineItemStateMapper.highlightedEventId = when (messageComposerMode) {
|
is MessageComposerMode.Reply -> it.composerMode.eventId
|
||||||
is MessageComposerMode.Normal -> null
|
}
|
||||||
is MessageComposerMode.Edit -> messageComposerMode.eventId
|
|
||||||
is MessageComposerMode.Quote -> null
|
|
||||||
is MessageComposerMode.Reply -> messageComposerMode.eventId
|
|
||||||
}
|
}
|
||||||
timelineItems
|
.distinctUntilChanged()
|
||||||
|
) { timelineItems, highlightedEventId ->
|
||||||
|
messageTimelineItemStateFactory.create(timelineItems, highlightedEventId)
|
||||||
}
|
}
|
||||||
.map(messageTimelineItemStateMapper::map)
|
|
||||||
.execute {
|
.execute {
|
||||||
copy(timelineItems = it)
|
copy(timelineItems = it)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue