diff --git a/SessionMessagingKit/Messages/Message.swift b/SessionMessagingKit/Messages/Message.swift index a8267acae..9dec50347 100644 --- a/SessionMessagingKit/Messages/Message.swift +++ b/SessionMessagingKit/Messages/Message.swift @@ -356,13 +356,14 @@ public extension Message { dependencies: SMKDependencies = SMKDependencies() ) -> [Reaction] { var results: [Reaction] = [] + guard let reactions = message.reactions else { return results } let userPublicKey: String = getUserHexEncodedPublicKey(db) let blindedUserPublicKey: String? = SessionThread .getUserHexEncodedBlindedKey( threadId: openGroupId, threadVariant: .openGroup ) - for (encodedEmoji, rawReaction) in message.reactions { + for (encodedEmoji, rawReaction) in reactions { if let emoji = encodedEmoji.removingPercentEncoding, rawReaction.count > 0, let reactors = rawReaction.reactors diff --git a/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift b/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift index c30dfcf3a..8ce774b31 100644 --- a/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift +++ b/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift @@ -49,7 +49,7 @@ extension OpenGroupAPI { public let index: Int64 } - public let reactions: [String:Reaction] + public let reactions: [String:Reaction]? } } @@ -107,7 +107,7 @@ extension OpenGroupAPI.Message { whisperTo: try? container.decode(String.self, forKey: .whisperTo), base64EncodedData: maybeBase64EncodedData, base64EncodedSignature: maybeBase64EncodedSignature, - reactions: maybeReactions ?? [:] + reactions: !container.contains(.reactions) ? nil : (maybeReactions ?? [:]) ) } } diff --git a/SessionMessagingKit/Open Groups/OpenGroupManager.swift b/SessionMessagingKit/Open Groups/OpenGroupManager.swift index 7bee7652e..a54f51ec0 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupManager.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupManager.swift @@ -515,6 +515,11 @@ public final class OpenGroupManager: NSObject { // Process the messages sortedMessages.forEach { message in + if message.base64EncodedData == nil && message.reactions == nil { + messageServerIdsToRemove.append(Int64(message.id)) + return + } + // Handle messages if let base64EncodedString: String = message.base64EncodedData, let data = Data(base64Encoded: base64EncodedString) @@ -556,22 +561,24 @@ public final class OpenGroupManager: NSObject { } // Handle reactions - do { - let reactions: [Reaction] = Message.processRawReceivedReactions( - db, - openGroupId: openGroup.id, - message: message, - dependencies: dependencies - ) - - try MessageReceiver.handleOpenGroupReactions( - db, - openGroupMessageServerId: message.id, - openGroupReactions: reactions - ) - } - catch { - SNLog("Couldn't handle open group reactions due to error: \(error).") + if message.reactions != nil { + do { + let reactions: [Reaction] = Message.processRawReceivedReactions( + db, + openGroupId: openGroup.id, + message: message, + dependencies: dependencies + ) + + try MessageReceiver.handleOpenGroupReactions( + db, + openGroupMessageServerId: message.id, + openGroupReactions: reactions + ) + } + catch { + SNLog("Couldn't handle open group reactions due to error: \(error).") + } } }