From 19a1edb33ae98093bafade963ed6607582325b86 Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Wed, 3 Aug 2022 09:58:13 +1000 Subject: [PATCH] WIP: persist reaction locally --- SessionMessagingKit/Messages/Message.swift | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/SessionMessagingKit/Messages/Message.swift b/SessionMessagingKit/Messages/Message.swift index e33da9647..02333c089 100644 --- a/SessionMessagingKit/Messages/Message.swift +++ b/SessionMessagingKit/Messages/Message.swift @@ -302,6 +302,19 @@ public extension Message { throw MessageReceiverError.invalidMessage } + if let reactions = message.reactions { + try processRawReceivedReactions( + db, + reactions: reactions, + serverExpirationTimestamp: nil, + serverHash: nil, + openGroupId: openGroupId, + openGroupMessageServerId: message.id, + openGroupServerPublicKey: openGroupServerPublicKey, + dependencies: dependencies + ) + } + return try processRawReceivedMessage( db, envelope: envelope, @@ -348,6 +361,34 @@ public extension Message { ) } + private static func processRawReceivedReactions( + _ db: Database, + reactions: [String:OpenGroupAPI.Message.Reaction], + serverExpirationTimestamp: TimeInterval?, + serverHash: String?, + openGroupId: String? = nil, + openGroupMessageServerId: Int64? = nil, + openGroupServerPublicKey: String? = nil, + dependencies: SMKDependencies = SMKDependencies() + ) throws { + guard let openGroupMessageServerId = openGroupMessageServerId else { return } + for (encodedEmoji, rawReaction) in reactions { + if let emoji = encodedEmoji.removingPercentEncoding, + rawReaction.count > 0, + let reactors = rawReaction.reactors?.joined(separator: ",") + { + try Reaction( + interactionId: openGroupMessageServerId, + serverHash: nil, + timestampMs: Int64(floor((Date().timeIntervalSince1970 * 1000))), + authorId: reactors, + emoji: emoji, + count: rawReaction.count + ).insert(db) + } + } + } + private static func processRawReceivedMessage( _ db: Database, envelope: SNProtoEnvelope,