From 7383ddad04ed9d2b7ccf482a208811c99dc17f33 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 8 Aug 2022 13:07:29 +1000 Subject: [PATCH] update sortId logic after open group reaction index --- .../ConversationVC+Interaction.swift | 3 +- .../Database/Models/Reaction.swift | 14 ++++++-- SessionMessagingKit/Messages/Message.swift | 5 ++- .../Open Groups/Models/SOGSMessage.swift | 10 +++--- .../Open Groups/OpenGroupManager.swift | 36 ++++++++----------- .../MessageReceiver+VisibleMessages.swift | 3 +- 6 files changed, 35 insertions(+), 36 deletions(-) diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 487b3cef6..12852c69c 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -1088,8 +1088,7 @@ extension ConversationVC: let sortId = Reaction.getSortId( db, interactionId: cellViewModel.id, - emoji: emoji, - timestamp: sentTimestamp + emoji: emoji ) try Reaction( interactionId: cellViewModel.id, diff --git a/SessionMessagingKit/Database/Models/Reaction.swift b/SessionMessagingKit/Database/Models/Reaction.swift index b1e737e96..df10caad4 100644 --- a/SessionMessagingKit/Database/Models/Reaction.swift +++ b/SessionMessagingKit/Database/Models/Reaction.swift @@ -108,8 +108,7 @@ public extension Reaction { static func getSortId( _ db: Database, interactionId: Int64, - emoji: String, - timestamp: Int64 + emoji: String ) -> Int64 { if let existingSortId: Int64 = try? Reaction .select(Columns.sortId) @@ -121,6 +120,15 @@ public extension Reaction { return existingSortId } - return timestamp + if let existingLargestSortId: Int64 = try? Reaction + .select(max(Columns.sortId)) + .filter(Columns.interactionId == interactionId) + .asRequest(of: Int64.self) + .fetchOne(db) + { + return existingLargestSortId + 1 + } + + return 0 } } diff --git a/SessionMessagingKit/Messages/Message.swift b/SessionMessagingKit/Messages/Message.swift index 6022a4299..117670484 100644 --- a/SessionMessagingKit/Messages/Message.swift +++ b/SessionMessagingKit/Messages/Message.swift @@ -356,20 +356,19 @@ 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 reactions { + for (encodedEmoji, rawReaction) in message.reactions { if let emoji = encodedEmoji.removingPercentEncoding, rawReaction.count > 0, let reactors = rawReaction.reactors { var count = rawReaction.count - let sortId: Int64 = Int64(floor((rawReaction.first * 1000))) + let sortId: Int64 = rawReaction.index for reactor in reactors { if reactor == blindedUserPublicKey { continue } // Will add a reaction for this case outside of the loop let reaction = Reaction( diff --git a/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift b/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift index c4e543221..9bb7bb7ec 100644 --- a/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift +++ b/SessionMessagingKit/Open Groups/Models/SOGSMessage.swift @@ -40,16 +40,16 @@ extension OpenGroupAPI { case count case reactors case you - case first + case index } public let count: Int64 public let reactors: [String]? public let you: Bool - public let first: TimeInterval + 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: maybeReactions ?? [:] ) } } @@ -120,7 +120,7 @@ extension OpenGroupAPI.Message.Reaction { count: try container.decode(Int64.self, forKey: .count), reactors: try? container.decode([String].self, forKey: .reactors), you: (try? container.decode(Bool.self, forKey: .you)) ?? false, - first: ((try? container.decode(TimeInterval.self, forKey: .first)) ?? Date().timeIntervalSince1970) + index: (try container.decode(Int64.self, forKey: .index)) ) } } diff --git a/SessionMessagingKit/Open Groups/OpenGroupManager.swift b/SessionMessagingKit/Open Groups/OpenGroupManager.swift index de6085058..a40b58faf 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupManager.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupManager.swift @@ -515,10 +515,6 @@ public final class OpenGroupManager: NSObject { // Process the messages sortedMessages.forEach { message in - if message.base64EncodedData == nil && message.reactions == nil { - return - } - // Handle messages if let base64EncodedString: String = message.base64EncodedData, let data = Data(base64Encoded: base64EncodedString) @@ -560,27 +556,25 @@ public final class OpenGroupManager: NSObject { } // Handle reactions - if message.reactions != nil { - do { - let reactions: [Reaction] = Message.processRawReceivedReactions( + do { + let reactions: [Reaction] = Message.processRawReceivedReactions( + db, + openGroupId: openGroup.id, + message: message, + dependencies: dependencies + ) + + if !reactions.isEmpty { + try MessageReceiver.handleOpenGroupReactions( db, - openGroupId: openGroup.id, - message: message, - dependencies: dependencies + openGroupMessageServerId: message.id, + openGroupReactions: reactions ) - - if !reactions.isEmpty { - try MessageReceiver.handleOpenGroupReactions( - db, - openGroupMessageServerId: message.id, - openGroupReactions: reactions - ) - } - } - catch { - SNLog("Couldn't handle open group reactions due to error: \(error).") } } + catch { + SNLog("Couldn't handle open group reactions due to error: \(error).") + } } // Handle any deletions that are needed diff --git a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift index d4ab1f9e5..b028be09d 100644 --- a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift +++ b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift @@ -327,8 +327,7 @@ extension MessageReceiver { let sortId = Reaction.getSortId( db, interactionId: interactionId, - emoji: reaction.emoji, - timestamp: Int64(messageSentTimestamp * 1000) + emoji: reaction.emoji ) switch reaction.kind {