fix: improve realtime read receipt reconciliation
Some checks failed
Android CI / android (push) Has started running
Android Release / release (push) Has been cancelled
CI / test (push) Has been cancelled

fix: apply read state up to server last_read_message_id
This commit is contained in:
2026-04-05 14:57:02 +03:00
parent a8be41c55e
commit af53048013
2 changed files with 19 additions and 1 deletions

View File

@@ -89,6 +89,18 @@ interface MessageDao {
)
suspend fun updateMessageStatus(messageId: Long, status: String?)
@Query(
"""
UPDATE messages
SET status = :status
WHERE chat_id = :chatId
AND id > 0
AND id <= :messageId
AND status IS NOT NULL
"""
)
suspend fun updateMessageStatusesUpTo(chatId: Long, messageId: Long, status: String)
@Transaction
suspend fun clearAndReplaceMessages(
chatId: Long,

View File

@@ -200,8 +200,14 @@ class HandleRealtimeEventsUseCase @Inject constructor(
}
is RealtimeEvent.MessageRead -> {
val resolvedReadMessageId = event.lastReadMessageId ?: event.messageId
messageDao.updateMessageStatusesUpTo(
chatId = event.chatId,
messageId = resolvedReadMessageId,
status = "read",
)
messageDao.updateMessageStatus(
messageId = event.messageId,
messageId = resolvedReadMessageId,
status = "read",
)
if (activeChatTracker.activeChatId.value == event.chatId) {