19
19
import Foundation
20
20
import InfomaniakDI
21
21
import MailResources
22
+ import OrderedCollections
22
23
import RealmSwift
23
24
24
25
public struct ThreadResult : Decodable {
@@ -323,6 +324,9 @@ public class Thread: Object, Decodable, Identifiable {
323
324
}
324
325
325
326
public extension Thread {
327
+ typealias MessageId = String
328
+ typealias RecipientsByReaction = OrderedDictionary < String , [ Recipient ] >
329
+
326
330
/// Re-generate `Thread` properties given the messages it contains.
327
331
func recomputeOrFail( ) throws {
328
332
messages = messages. sorted { $0. internalDate. compare ( $1. internalDate) == . orderedAscending } . toRealmList ( )
@@ -338,8 +342,8 @@ public extension Thread {
338
342
date = lastMessageFromFolder. date
339
343
isLastMessageFromFolderSnoozed = lastMessageFromFolder. isSnoozed
340
344
341
- var messagesById = [ String : Message] ( )
342
- var reactionsByMessageId = [ String : [ String : [ Recipient ] ] ] ( )
345
+ var messagesById = [ MessageId : Message] ( )
346
+ var reactionsByMessageId = [ MessageId : RecipientsByReaction ] ( )
343
347
344
348
for message in messages {
345
349
if let messageId = message. messageId {
@@ -414,24 +418,24 @@ public extension Thread {
414
418
snoozeEndDate = nil
415
419
}
416
420
417
- private func getReaction( from message: Message , reactions: inout [ String : [ String : [ Recipient ] ] ] ) {
421
+ private func getReaction( from message: Message , reactions: inout [ MessageId : RecipientsByReaction ] ) {
418
422
guard let emojiReaction = message. emojiReaction, let messageTargets = message. inReplyTo? . parseMessageIds ( ) else {
419
423
return
420
424
}
421
425
422
426
for messageTarget in messageTargets {
423
427
let recipients = message. from. detached ( ) . toArray ( )
424
428
425
- var messageTargetReactions = reactions [ messageTarget] ?? [ : ]
426
- var reactingRecipients = messageTargetReactions [ emojiReaction] ?? [ ]
429
+ var messageReactions = reactions [ messageTarget] ?? [ : ]
430
+ var reactingRecipients = messageReactions [ emojiReaction] ?? [ ]
427
431
reactingRecipients. append ( contentsOf: recipients)
428
- messageTargetReactions [ emojiReaction] = reactingRecipients
432
+ messageReactions [ emojiReaction] = reactingRecipients
429
433
430
- reactions [ messageTarget] = messageTargetReactions
434
+ reactions [ messageTarget] = messageReactions
431
435
}
432
436
}
433
437
434
- private func updateReactionsForMessages( _ reactions: [ String : [ String : [ Recipient ] ] ] , messagesById: [ String : Message ] ) {
438
+ private func updateReactionsForMessages( _ reactions: [ MessageId : RecipientsByReaction ] , messagesById: [ MessageId : Message ] ) {
435
439
for (messageId, reactions) in reactions {
436
440
guard let message = messagesById [ messageId] else { continue }
437
441
0 commit comments