From 57be9d686c53a54eeedba0e16b25dfbb2af0a543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20=C5=BBerko?= Date: Sat, 16 Mar 2024 00:20:01 +0100 Subject: [PATCH] fix: unread mention --- .../com/wire/kalium/persistence/UnreadEvents.sq | 14 ++++++-------- .../persistence/dao/message/MessageDAOImpl.kt | 12 +++++++----- .../dao/message/MessageInsertExtension.kt | 12 ++++++------ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/UnreadEvents.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/UnreadEvents.sq index 020b4745972..37d4d49ba67 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/UnreadEvents.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/UnreadEvents.sq @@ -18,14 +18,12 @@ DELETE FROM UnreadEvent WHERE id = ? AND conversation_id = ?; deleteUnreadEvents: DELETE FROM UnreadEvent WHERE creation_date <= ? AND conversation_id = ?; -insertEvent: -INSERT OR IGNORE INTO UnreadEvent(id, type, conversation_id, creation_date) -VALUES(?, ?, ?, ?); - -updateEvent: -UPDATE OR IGNORE UnreadEvent -SET type = :type -WHERE id = :id AND conversation_id = :conversation_id; +upsertEvent: +INSERT INTO UnreadEvent(id, type, conversation_id, creation_date) +VALUES (?, ?, ?, ?) +ON CONFLICT(id, conversation_id) DO UPDATE SET +type = excluded.type, +creation_date = excluded.creation_date; getUnreadEvents: SELECT conversation_id, type FROM UnreadEvent; diff --git a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAOImpl.kt b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAOImpl.kt index 8016c5e9bde..47a4ae74b8a 100644 --- a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAOImpl.kt +++ b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAOImpl.kt @@ -332,6 +332,7 @@ internal class MessageDAOImpl internal constructor( queries.markMessageAsEdited(editTimeStamp.toInstant(), currentMessageId, conversationId) reactionsQueries.deleteAllReactionsForMessage(currentMessageId, conversationId) queries.deleteMessageMentions(currentMessageId, conversationId) + unreadEventsQueries.deleteUnreadEvent(currentMessageId, conversationId) queries.updateMessageTextContent(newTextContent.messageBody, currentMessageId, conversationId) newTextContent.mentions.forEach { queries.insertMessageMention( @@ -343,14 +344,15 @@ internal class MessageDAOImpl internal constructor( ) } val selfMention = newTextContent.mentions.firstNotNullOfOrNull { it.userId == selfUserId } - if (selfMention != null) { - unreadEventsQueries.updateEvent(UnreadEventTypeEntity.MENTION, currentMessageId, conversationId) - } else { - unreadEventsQueries.updateEvent(UnreadEventTypeEntity.MESSAGE, currentMessageId, conversationId) - } queries.updateMessageId(newMessageId, currentMessageId, conversationId) queries.updateQuotedMessageId(newMessageId, currentMessageId, conversationId) + + if (selfMention != null) { + unreadEventsQueries.upsertEvent(newMessageId, UnreadEventTypeEntity.MENTION, conversationId, editTimeStamp.toInstant()) + } else { + unreadEventsQueries.upsertEvent(newMessageId, UnreadEventTypeEntity.MESSAGE, conversationId, editTimeStamp.toInstant()) + } } } diff --git a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageInsertExtension.kt b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageInsertExtension.kt index 65de78fdb9d..19474adfb81 100644 --- a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageInsertExtension.kt +++ b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageInsertExtension.kt @@ -308,7 +308,7 @@ internal class MessageInsertExtensionImpl( if (!message.isSelfMessage && message.date > lastRead) { when (message.content) { - is MessageEntityContent.Knock -> unreadEventsQueries.insertEvent( + is MessageEntityContent.Knock -> unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.KNOCK, message.conversationId, @@ -324,14 +324,14 @@ internal class MessageInsertExtensionImpl( is MessageEntityContent.RestrictedAsset, is MessageEntityContent.Composite, is MessageEntityContent.Location, - is MessageEntityContent.FailedDecryption -> unreadEventsQueries.insertEvent( + is MessageEntityContent.FailedDecryption -> unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.MESSAGE, message.conversationId, message.date ) - MessageEntityContent.MissedCall -> unreadEventsQueries.insertEvent( + MessageEntityContent.MissedCall -> unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.MISSED_CALL, message.conversationId, @@ -377,7 +377,7 @@ internal class MessageInsertExtensionImpl( isQuotingSelfUser = senderId == selfUserIDEntity } when { - isQuotingSelfUser -> unreadEventsQueries.insertEvent( + isQuotingSelfUser -> unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.REPLY, message.conversationId, @@ -385,14 +385,14 @@ internal class MessageInsertExtensionImpl( ) textContent.mentions.map { it.userId }.contains(selfUserIDEntity) -> - unreadEventsQueries.insertEvent( + unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.MENTION, message.conversationId, message.date ) - else -> unreadEventsQueries.insertEvent( + else -> unreadEventsQueries.upsertEvent( message.id, UnreadEventTypeEntity.MESSAGE, message.conversationId,