From a157e74b5d27601108763df74b4c0e1885df6722 Mon Sep 17 00:00:00 2001 From: Valentin Perignon Date: Mon, 24 Jul 2023 09:51:16 +0200 Subject: [PATCH] refactor: computeScore returns an Optional --- MailCore/Cache/DraftContentManager.swift | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/MailCore/Cache/DraftContentManager.swift b/MailCore/Cache/DraftContentManager.swift index 70a4786d6..b51383de0 100644 --- a/MailCore/Cache/DraftContentManager.swift +++ b/MailCore/Cache/DraftContentManager.swift @@ -207,8 +207,11 @@ public class DraftContentManager: ObservableObject { let recipientsFieldsToCheck = [\Message.to, \Message.from, \Message.cc] for field in recipientsFieldsToCheck { - if let signature = findSignatureInRecipients(recipients: previousMessage[keyPath: field], signaturesForEmail: signaturesForEmail) { - return signature + if let signature = findSignatureInRecipients( + recipients: previousMessage[keyPath: field], + signaturesForEmail: signaturesForEmail + ) { + return signature.freezeIfNeeded() } } @@ -223,22 +226,23 @@ public class DraftContentManager: ObservableObject { var bestMatchingScore: SignatureMatch? for recipient in matchingEmailRecipients { - guard let signatures = signaturesForEmail[recipient.email] else { continue } + guard let signatures = signaturesForEmail[recipient.email], + let (signature, computedScore) = computeScore(for: signatures, recipient: recipient) else { continue } - let (signature, computedScore) = computeScore(for: signatures, recipient: recipient) if computedScore == .exactMatchDefault { return signature } - if let bestMatchingScore { - + if bestMatchingScore == nil || computedScore > bestMatchingScore! { + bestMatchingScore = computedScore + bestSignature = signature } } - return nil + return bestSignature } - private func computeScore(for signatures: [Signature], recipient: Recipient) -> (Signature, SignatureMatch) { + private func computeScore(for signatures: [Signature], recipient: Recipient) -> (Signature, SignatureMatch)? { var bestResult: (Signature, SignatureMatch)? for signature in signatures { @@ -247,10 +251,12 @@ public class DraftContentManager: ObservableObject { return (signature, computedScore) } - bestResult = (signature, computedScore) + if bestResult == nil || computedScore > bestResult!.1 { + bestResult = (signature, computedScore) + } } - return bestResult! + return bestResult } private func computeScore(for signature: Signature, recipient: Recipient) -> SignatureMatch {