diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageContent.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageContent.kt index fdc06bd0a84..bddd948fa2b 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageContent.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageContent.kt @@ -500,6 +500,7 @@ sealed interface MessagePreviewContent { data class MissedCall(override val username: String?) : WithUser + data class Deleted(override val username: String?) : WithUser } data class Ephemeral(val isGroupConversation: Boolean) : MessagePreviewContent diff --git a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageMapper.kt b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageMapper.kt index 2b2d64013a5..2d42ef44e51 100644 --- a/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageMapper.kt +++ b/logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageMapper.kt @@ -533,6 +533,7 @@ private fun MessagePreviewEntityContent.toMessageContent(): MessagePreviewConten is MessagePreviewEntityContent.ConversationVerificationDegradedMls -> MessagePreviewContent.VerificationChanged.DegradedMls is MessagePreviewEntityContent.ConversationVerificationDegradedProteus -> MessagePreviewContent.VerificationChanged.DegradedProteus is MessagePreviewEntityContent.Location -> MessagePreviewContent.WithUser.Location(username = senderName) + is MessagePreviewEntityContent.Deleted -> MessagePreviewContent.WithUser.Deleted(username = senderName) } fun AssetTypeEntity.toModel(): AssetType = when (this) { diff --git a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/MessagePreview.sq b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/MessagePreview.sq index 95972d92701..f57c6006a50 100644 --- a/persistence/src/commonMain/db_user/com/wire/kalium/persistence/MessagePreview.sq +++ b/persistence/src/commonMain/db_user/com/wire/kalium/persistence/MessagePreview.sq @@ -50,7 +50,7 @@ SELECT * FROM MessagePreview AS message WHERE id IN ( SELECT id FROM Message WHERE - Message.visibility = 'VISIBLE' AND + Message.visibility IN ('VISIBLE', 'DELETED') AND Message.content_type IN ('TEXT', 'ASSET', 'KNOCK', 'MISSED_CALL', 'CONVERSATION_RENAMED', 'MEMBER_CHANGE', 'COMPOSITE', 'CONVERSATION_DEGRADED_MLS', 'CONVERSATION_DEGRADED_PROTEUS', 'CONVERSATION_VERIFIED_MLS', 'CONVERSATION_VERIFIED_PROTEUS', 'LOCATION') GROUP BY Message.conversation_id HAVING Message.creation_date = MAX(Message.creation_date) diff --git a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageEntity.kt b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageEntity.kt index bee87d40f2f..42c4406ecfc 100644 --- a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageEntity.kt +++ b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageEntity.kt @@ -380,6 +380,7 @@ data class NotificationMessageEntity( sealed class MessagePreviewEntityContent { + data class Deleted(val senderName: String?) : MessagePreviewEntityContent() data class Text(val senderName: String?, val messageBody: String) : MessagePreviewEntityContent() data class Composite(val senderName: String?, val messageBody: String?) : MessagePreviewEntityContent() diff --git a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageMapper.kt b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageMapper.kt index 1e2328839ac..53b1a4f97b1 100644 --- a/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageMapper.kt +++ b/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageMapper.kt @@ -43,6 +43,7 @@ object MessageMapper { @Suppress("ComplexMethod", "LongMethod") private fun toMessagePreviewEntityContent( contentType: MessageEntity.ContentType, + visibility: MessageEntity.Visibility, senderName: String?, isSelfMessage: Boolean, memberChangeList: List?, @@ -61,6 +62,7 @@ object MessageMapper { } else { mapContentType( contentType, + visibility, senderName, isSelfMessage, memberChangeList, @@ -79,6 +81,7 @@ object MessageMapper { @Suppress("LongMethod", "ComplexMethod") private fun mapContentType( contentType: MessageEntity.ContentType, + visibility: MessageEntity.Visibility, senderName: String?, isSelfMessage: Boolean, memberChangeList: List?, @@ -90,6 +93,10 @@ object MessageMapper { selfUserId: QualifiedIDEntity?, senderUserId: QualifiedIDEntity? ): MessagePreviewEntityContent { + if (visibility == MessageEntity.Visibility.DELETED) { + return MessagePreviewEntityContent.Deleted(senderName) + } + return when (contentType) { MessageEntity.ContentType.COMPOSITE -> MessagePreviewEntityContent.Composite( senderName = senderName, @@ -253,6 +260,7 @@ object MessageMapper { ): MessagePreviewEntity { val content = toMessagePreviewEntityContent( contentType = contentType, + visibility = visibility, senderName = senderName, isSelfMessage = isSelfMessage, memberChangeList = memberChangeList,