fix: improve realtime read receipt reconciliation
fix: apply read state up to server last_read_message_id
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user