refactor: extract message ui mapper

This commit is contained in:
Codex
2026-05-14 18:03:30 +03:00
parent 2e472733d9
commit 2bf81c60d6
2 changed files with 33 additions and 16 deletions
@@ -0,0 +1,27 @@
package dev.meloda.fast.messageshistory
import com.conena.nanokt.collections.indexOfFirstOrNull
import dev.meloda.fast.common.provider.ResourceProvider
import dev.meloda.fast.datastore.AppSettings
import dev.meloda.fast.domain.util.asPresentation
import dev.meloda.fast.messageshistory.model.MessagesHistoryScreenState
import dev.meloda.fast.model.api.domain.VkMessage
import dev.meloda.fast.ui.model.vk.MessageUiItem
fun buildMessagesHistoryUiMessages(
messages: List<VkMessage>,
selectedMessages: List<VkMessage>,
screenState: MessagesHistoryScreenState,
resourceProvider: ResourceProvider,
): List<MessageUiItem> = messages.mapIndexed { index, message ->
message.asPresentation(
resourceProvider = resourceProvider,
showName = true,
prevMessage = messages.getOrNull(index + 1),
nextMessage = messages.getOrNull(index - 1),
showTimeInActionMessages = AppSettings.Experimental.showTimeInActionMessages,
convo = screenState.convo,
isSelected = screenState.editCmId == message.cmId ||
selectedMessages.indexOfFirstOrNull { it.id == message.id } != null
)
}
@@ -47,7 +47,6 @@ import dev.meloda.fast.domain.GetMessageReadPeersUseCase
import dev.meloda.fast.domain.LoadConvosByIdUseCase
import dev.meloda.fast.domain.LongPollUpdatesParser
import dev.meloda.fast.domain.MessagesUseCase
import dev.meloda.fast.domain.util.asPresentation
import dev.meloda.fast.domain.util.extractAvatar
import dev.meloda.fast.domain.util.extractReplySummary
import dev.meloda.fast.domain.util.extractReplyTitle
@@ -1306,21 +1305,12 @@ class MessagesHistoryViewModelImpl(
}
private fun syncUiMessages(): List<MessageUiItem> {
val messages = messages.value
val selectedMessages = selectedMessages.value
val newUiMessages = messages.mapIndexed { index, message ->
message.asPresentation(
resourceProvider = resourceProvider,
showName = true,
prevMessage = messages.getOrNull(index + 1),
nextMessage = messages.getOrNull(index - 1),
showTimeInActionMessages = AppSettings.Experimental.showTimeInActionMessages,
convo = screenState.value.convo,
isSelected = screenState.value.editCmId == message.cmId ||
selectedMessages.indexOfFirstOrNull { it.id == message.id } != null
)
}
val newUiMessages = buildMessagesHistoryUiMessages(
messages = messages.value,
selectedMessages = selectedMessages.value,
screenState = screenState.value,
resourceProvider = resourceProvider
)
uiMessages.setValue { newUiMessages }
return newUiMessages