diff --git a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift index 9b72c6c84..b0343fc37 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift @@ -386,7 +386,14 @@ extension MessageReceiver { } let reactionMessage = ReactMessage(timestamp: timestamp, authorId: author, emoji: reaction.emoji) reactionMessage.sender = message.sender - if let serverID = message.openGroupServerMessageID { reactionMessage.messageId = "\(serverID)" } + if let serverID = message.openGroupServerMessageID { + reactionMessage.messageId = "\(serverID)" + // Create a lookup between the openGroupServerMessageId and the tsMessage id for easy lookup + // For emoji reacts, the lookup is linking emoji react message server id to the id of the tsMessage that the emoji is reacted to + if let openGroup: OpenGroupV2 = storage.getV2OpenGroup(for: threadID) { + storage.addOpenGroupServerIdLookup(serverID, tsMessageId: tsMessage?.uniqueId, in: openGroup.room, on: openGroup.server, using: transaction) + } + } if let serverHash = message.serverHash { reactionMessage.messageId = serverHash } switch reaction.kind { case .react: diff --git a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift index 930361510..15d363cd5 100644 --- a/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift +++ b/SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupPollerV2.swift @@ -104,8 +104,18 @@ public final class OpenGroupPollerV2 : NSObject { } guard let tsMessage: TSMessage = TSMessage.fetch(uniqueId: messageLookup.tsMessageId, transaction: transaction) else { return } - tsMessage.remove(with: transaction) - storage.removeOpenGroupServerIdLookup(openGroupServerMessageId, in: body.room, on: self.server, using: transaction) + if tsMessage.openGroupServerMessageID == openGroupServerMessageId { // This is the case the deleted message is a tsMessage + tsMessage.remove(with: transaction) + storage.removeOpenGroupServerIdLookup(openGroupServerMessageId, in: body.room, on: self.server, using: transaction) + } else { // Otherwise the deleted message is an emoji react + for reaction in tsMessage.reactions { + if let reactMessage = reaction as? ReactMessage, let messageIdString = reactMessage.messageId, let messageId = UInt64(messageIdString), messageId == openGroupServerMessageId { + tsMessage.removeReaction(reactMessage, transaction: transaction) + storage.removeOpenGroupServerIdLookup(openGroupServerMessageId, in: body.room, on: self.server, using: transaction) + break + } + } + } } } }