From a5ec0595ad4b4d176befc677612cea1df0ee992b Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Sat, 14 Mar 2026 21:17:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20read-=D0=B8=D0=BD=D0=B4=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D0=B2=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D0=BE=D0=B3=D0=B5=20=D1=81=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82-=D0=BB=D0=B8=D1=81=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messenger/ui/chats/ChatViewModel.kt | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index d441945..659de76 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -440,9 +440,19 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { private fun markAllOutgoingAsRead() { _messages.value = _messages.value.map { msg -> - if (msg.isOutgoing && msg.status != MessageStatus.READ) { - msg.copy(status = MessageStatus.READ) - } else msg + if (!msg.isOutgoing) return@map msg + + val nextStatus = + when (msg.status) { + // Read event can promote only already-sent/delivered messages. + MessageStatus.SENT, + MessageStatus.DELIVERED, + MessageStatus.READ -> MessageStatus.READ + MessageStatus.SENDING, + MessageStatus.ERROR -> msg.status + } + + if (nextStatus != msg.status) msg.copy(status = nextStatus) else msg } updateCacheFromCurrentMessages() } @@ -479,7 +489,17 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { private fun updateMessageStatus(messageId: String, status: MessageStatus) { _messages.value = _messages.value.map { msg -> - if (msg.id == messageId) msg.copy(status = status) else msg + if (msg.id != messageId) return@map msg + + // Keep read status monotonic: late DELIVERED must not downgrade READ. + val mergedStatus = + when (status) { + MessageStatus.DELIVERED -> + if (msg.status == MessageStatus.READ) MessageStatus.READ + else MessageStatus.DELIVERED + else -> status + } + if (mergedStatus != msg.status) msg.copy(status = mergedStatus) else msg } // πŸ”₯ Π’Π°ΠΊΠΆΠ΅ обновляСм кэш!