diff --git a/android/app/src/main/java/ru/daemonlord/messenger/data/chat/local/dao/ChatDao.kt b/android/app/src/main/java/ru/daemonlord/messenger/data/chat/local/dao/ChatDao.kt index 96f1284..d77d155 100644 --- a/android/app/src/main/java/ru/daemonlord/messenger/data/chat/local/dao/ChatDao.kt +++ b/android/app/src/main/java/ru/daemonlord/messenger/data/chat/local/dao/ChatDao.kt @@ -119,8 +119,8 @@ interface ChatDao { UPDATE chats SET last_message_text = :lastMessageText, last_message_type = :lastMessageType, - last_message_created_at = :lastMessageCreatedAt, - updated_sort_at = :updatedSortAt + last_message_created_at = COALESCE(:lastMessageCreatedAt, last_message_created_at), + updated_sort_at = COALESCE(:updatedSortAt, updated_sort_at, last_message_created_at) WHERE id = :chatId """ ) diff --git a/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt b/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt index 7bbf304..7a27870 100644 --- a/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt +++ b/android/app/src/main/java/ru/daemonlord/messenger/domain/realtime/usecase/HandleRealtimeEventsUseCase.kt @@ -49,6 +49,7 @@ class HandleRealtimeEventsUseCase @Inject constructor( val activeChatId = activeChatTracker.activeChatId.value val activeUserId = tokenRepository.getActiveUserId() val isOwnMessage = activeUserId != null && event.senderId == activeUserId + val eventTimestamp = event.createdAt ?: java.time.Instant.now().toString() val myUsername = activeUserId?.let { userId -> tokenRepository.getAccounts() .firstOrNull { it.userId == userId } @@ -84,7 +85,7 @@ class HandleRealtimeEventsUseCase @Inject constructor( text = event.text, status = null, attachmentWaveformJson = null, - createdAt = event.createdAt ?: java.time.Instant.now().toString(), + createdAt = eventTimestamp, updatedAt = null, ) ) @@ -93,8 +94,8 @@ class HandleRealtimeEventsUseCase @Inject constructor( chatId = event.chatId, lastMessageText = lastMessagePreview, lastMessageType = event.type, - lastMessageCreatedAt = event.createdAt, - updatedSortAt = event.createdAt, + lastMessageCreatedAt = eventTimestamp, + updatedSortAt = eventTimestamp, ) if (activeChatId == event.chatId) { chatDao.markChatRead(chatId = event.chatId) @@ -111,17 +112,18 @@ class HandleRealtimeEventsUseCase @Inject constructor( } is RealtimeEvent.MessageUpdated -> { + val updateTimestamp = event.updatedAt ?: java.time.Instant.now().toString() messageDao.updateMessageText( messageId = event.messageId, text = event.text, - updatedAt = event.updatedAt, + updatedAt = updateTimestamp, ) chatDao.updateLastMessage( chatId = event.chatId, lastMessageText = event.text?.takeIf { it.isNotBlank() } ?: fallbackMessagePreview(event.type), lastMessageType = event.type, - lastMessageCreatedAt = event.updatedAt, - updatedSortAt = event.updatedAt, + lastMessageCreatedAt = updateTimestamp, + updatedSortAt = updateTimestamp, ) if (activeChatTracker.activeChatId.value == event.chatId) { messageRepository.syncRecentMessages(chatId = event.chatId)