diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryUiMapper.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryUiMapper.kt new file mode 100644 index 00000000..1469b711 --- /dev/null +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryUiMapper.kt @@ -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, + selectedMessages: List, + screenState: MessagesHistoryScreenState, + resourceProvider: ResourceProvider, +): List = 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 + ) +} diff --git a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModelImpl.kt b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModelImpl.kt index e6c1542b..ea853850 100644 --- a/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModelImpl.kt +++ b/feature/messageshistory/src/main/kotlin/dev/meloda/fast/messageshistory/MessagesHistoryViewModelImpl.kt @@ -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 { - 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