feat: Implement read receipt handling and mark all outgoing messages as read

This commit is contained in:
k1ngsterr1
2026-01-13 04:10:07 +05:00
parent cdb3d7ab9e
commit e44bed4fa8
5 changed files with 59 additions and 27 deletions

View File

@@ -262,16 +262,20 @@ class MessageRepository private constructor(private val context: Context) {
/**
* Обработка прочтения
* В Desktop PacketRead сообщает что собеседник прочитал наши сообщения
* fromPublicKey - кто прочитал (собеседник)
*/
suspend fun handleRead(packet: PacketRead) {
val account = currentAccount ?: return
messageDao.markAsRead(account, packet.messageId)
// Обновляем кэш
// Отмечаем все наши исходящие сообщения к этому собеседнику как прочитанные
messageDao.markAllAsRead(account, packet.fromPublicKey)
// Обновляем кэш - все исходящие сообщения помечаем как прочитанные
val dialogKey = getDialogKey(packet.fromPublicKey)
messageCache[dialogKey]?.let { flow ->
flow.value = flow.value.map { msg ->
if (msg.messageId == packet.messageId) msg.copy(isRead = true)
if (msg.isFromMe && !msg.isRead) msg.copy(isRead = true)
else msg
}
}