Skip to content

Commit 7f64e16

Browse files
feat: Order reactions by message date
1 parent 2548b23 commit 7f64e16

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

MailCore/Models/Thread.swift

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import Foundation
2020
import InfomaniakDI
2121
import MailResources
22+
import OrderedCollections
2223
import RealmSwift
2324

2425
public struct ThreadResult: Decodable {
@@ -323,6 +324,9 @@ public class Thread: Object, Decodable, Identifiable {
323324
}
324325

325326
public extension Thread {
327+
typealias MessageId = String
328+
typealias RecipientsByReaction = OrderedDictionary<String, [Recipient]>
329+
326330
/// Re-generate `Thread` properties given the messages it contains.
327331
func recomputeOrFail() throws {
328332
messages = messages.sorted { $0.internalDate.compare($1.internalDate) == .orderedAscending }.toRealmList()
@@ -338,8 +342,8 @@ public extension Thread {
338342
date = lastMessageFromFolder.date
339343
isLastMessageFromFolderSnoozed = lastMessageFromFolder.isSnoozed
340344

341-
var messagesById = [String: Message]()
342-
var reactionsByMessageId = [String: [String: [Recipient]]]()
345+
var messagesById = [MessageId: Message]()
346+
var reactionsByMessageId = [MessageId: RecipientsByReaction]()
343347

344348
for message in messages {
345349
if let messageId = message.messageId {
@@ -414,24 +418,24 @@ public extension Thread {
414418
snoozeEndDate = nil
415419
}
416420

417-
private func getReaction(from message: Message, reactions: inout [String: [String: [Recipient]]]) {
421+
private func getReaction(from message: Message, reactions: inout [MessageId: RecipientsByReaction]) {
418422
guard let emojiReaction = message.emojiReaction, let messageTargets = message.inReplyTo?.parseMessageIds() else {
419423
return
420424
}
421425

422426
for messageTarget in messageTargets {
423427
let recipients = message.from.detached().toArray()
424428

425-
var messageTargetReactions = reactions[messageTarget] ?? [:]
426-
var reactingRecipients = messageTargetReactions[emojiReaction] ?? []
429+
var messageReactions = reactions[messageTarget] ?? [:]
430+
var reactingRecipients = messageReactions[emojiReaction] ?? []
427431
reactingRecipients.append(contentsOf: recipients)
428-
messageTargetReactions[emojiReaction] = reactingRecipients
432+
messageReactions[emojiReaction] = reactingRecipients
429433

430-
reactions[messageTarget] = messageTargetReactions
434+
reactions[messageTarget] = messageReactions
431435
}
432436
}
433437

434-
private func updateReactionsForMessages(_ reactions: [String: [String: [Recipient]]], messagesById: [String: Message]) {
438+
private func updateReactionsForMessages(_ reactions: [MessageId: RecipientsByReaction], messagesById: [MessageId: Message]) {
435439
for (messageId, reactions) in reactions {
436440
guard let message = messagesById[messageId] else { continue }
437441

0 commit comments

Comments
 (0)