From 820f8fa93dceaf2c1248a5eb84cfd5fe756e9407 Mon Sep 17 00:00:00 2001 From: Valentin Perignon Date: Fri, 28 Jul 2023 09:21:05 +0200 Subject: [PATCH] feat(DraftContentManager): Use Dictionary(grouping:, by:) --- MailCore/Cache/DraftContentManager.swift | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/MailCore/Cache/DraftContentManager.swift b/MailCore/Cache/DraftContentManager.swift index 664df0a1f..f9760260a 100644 --- a/MailCore/Cache/DraftContentManager.swift +++ b/MailCore/Cache/DraftContentManager.swift @@ -201,16 +201,12 @@ public class DraftContentManager: ObservableObject { private func guessMostFittingSignature(userSignatures: [Signature], defaultSignature: Signature) -> Signature { guard let previousMessage = messageReply?.message else { return defaultSignature } - var signaturesAssociatedToEmail = [String: [Signature]]() - for signature in userSignatures { - signaturesAssociatedToEmail[signature.senderEmail, default: []].append(signature) - } - + let signaturesGroupedByEmail = Dictionary(grouping: userSignatures, by: \.senderEmail) let recipientsFieldsToCheck = [\Message.to, \Message.from, \Message.cc] for field in recipientsFieldsToCheck { if let signature = findSignatureInRecipients( recipients: previousMessage[keyPath: field], - signaturesAssociatedToEmail: signaturesAssociatedToEmail + signaturesGroupedByEmail: signaturesGroupedByEmail ) { return signature.freezeIfNeeded() } @@ -220,15 +216,15 @@ public class DraftContentManager: ObservableObject { } private func findSignatureInRecipients(recipients: List, - signaturesAssociatedToEmail: [String: [Signature]]) -> Signature? { - let matchingEmailRecipients = recipients.filter { signaturesAssociatedToEmail[$0.email] != nil }.toArray() + signaturesGroupedByEmail: [String: [Signature]]) -> Signature? { + let matchingEmailRecipients = recipients.filter { signaturesGroupedByEmail[$0.email] != nil }.toArray() guard !matchingEmailRecipients.isEmpty else { return nil } var bestSignature: Signature? var bestMatchingScore: SignatureMatch? for recipient in matchingEmailRecipients { - guard let signatures = signaturesAssociatedToEmail[recipient.email], + guard let signatures = signaturesGroupedByEmail[recipient.email], let (signature, computedScore) = computeScore(for: signatures, recipient: recipient) else { continue } if computedScore == .exactMatchDefault {