feat: Implement read receipt handling and mark all outgoing messages as read
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user