diff --git a/WireDomain/Sources/WireDomain/Repositories/Message/MessageLocalStore.swift b/WireDomain/Sources/WireDomain/Repositories/Message/MessageLocalStore.swift index 1e4dce80a28..261d71a9bad 100644 --- a/WireDomain/Sources/WireDomain/Repositories/Message/MessageLocalStore.swift +++ b/WireDomain/Sources/WireDomain/Repositories/Message/MessageLocalStore.swift @@ -1055,18 +1055,29 @@ public final class MessageLocalStore: MessageLocalStoreProtocol { ) -> Bool { guard let messageNonce = UUID(uuidString: genericMessage.messageID), - let originalText = clientMessage.underlyingMessage?.textData, - case .text? = messageEdit.content, + let messageEditContent = messageEdit.content, senderID == clientMessage.sender?.remoteIdentifier - else { - return false - } + else { return false } - do { - let genericMessage = GenericMessage( - content: originalText.applyEdit(from: messageEdit.text), + let genericMessage: GenericMessage + switch messageEditContent { + + case let .text(newText): + guard let originalText = clientMessage.underlyingMessage?.textData else { return false } + genericMessage = GenericMessage( + content: originalText.applyEdit(from: newText), nonce: messageNonce ) + + case let .composite(newComposite): + guard clientMessage.underlyingMessage?.compositeData != nil else { return false } + genericMessage = GenericMessage( + content: newComposite, + nonce: messageNonce + ) + } + + do { try clientMessage.setUnderlyingMessage(genericMessage) } catch { WireLogger.messageProcessing.warn( diff --git a/wire-ios-data-model/Source/Model/Message/ZMClientMessage+Editing.swift b/wire-ios-data-model/Source/Model/Message/ZMClientMessage+Editing.swift index e079122cc86..05a824c7996 100644 --- a/wire-ios-data-model/Source/Model/Message/ZMClientMessage+Editing.swift +++ b/wire-ios-data-model/Source/Model/Message/ZMClientMessage+Editing.swift @@ -47,14 +47,13 @@ extension ZMClientMessage { /// /// - parameter messageEdit: Message edit update /// - parameter updateEvent: Update event which delivered the message edit update - /// - Returns: true if edit was succesfully applied + /// - Returns: true if edit was successfully applied func processMessageEdit(_ messageEdit: MessageEdit, from updateEvent: ZMUpdateEvent) -> Bool { guard let nonce = updateEvent.messageNonce, let senderUUID = updateEvent.senderUUID, let originalText = underlyingMessage?.textData, - case .text? = messageEdit.content, senderUUID == sender?.remoteIdentifier else { return false diff --git a/wire-ios-data-model/Source/Utilis/Protos/GenericMessage+Helper.swift b/wire-ios-data-model/Source/Utilis/Protos/GenericMessage+Helper.swift index f09b0182fb4..87b9e3b7b4e 100644 --- a/wire-ios-data-model/Source/Utilis/Protos/GenericMessage+Helper.swift +++ b/wire-ios-data-model/Source/Utilis/Protos/GenericMessage+Helper.swift @@ -161,13 +161,17 @@ public extension GenericMessage { } var compositeData: Composite? { - guard let content else { return nil } switch content { case let .composite(data): return data + case let .edited(messageEdit): + if case let .composite(composite)? = messageEdit.content { + return composite + } default: - return nil + break } + return nil } var imageAssetData: ImageAsset? { @@ -547,9 +551,7 @@ public extension Text { } func updateLinkPreview(from text: Text) -> Text { - guard !text.linkPreview.isEmpty else { - return self - } + guard !text.linkPreview.isEmpty else { return self } do { let data = try serializedData() var updatedText = try Text(serializedBytes: data) diff --git a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/Backup/BackupLocalStore/MessageContent+initWithGenericMessageContent.swift b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/Backup/BackupLocalStore/MessageContent+initWithGenericMessageContent.swift index 6d7237e6ec8..31d7c70010c 100644 --- a/wire-ios/Wire-iOS/Sources/UserInterface/Settings/Backup/BackupLocalStore/MessageContent+initWithGenericMessageContent.swift +++ b/wire-ios/Wire-iOS/Sources/UserInterface/Settings/Backup/BackupLocalStore/MessageContent+initWithGenericMessageContent.swift @@ -70,7 +70,9 @@ extension MessageBackupModel.Content { switch messageEdit.content { case let .text(text): self.init(text) - case .composite, .none: + case .composite: + fallthrough // composite messages are not supported in backups yet + case .none: return nil } }