diff --git a/enzevalos_iphone/SwiftUI/DisplayProtocols.swift b/enzevalos_iphone/SwiftUI/DisplayProtocols.swift index f7fde6e9c7033c09f9f5f3d4b337012f98179e20..74e7b7a090471cdb68d21e620aebb5140d998bc0 100644 --- a/enzevalos_iphone/SwiftUI/DisplayProtocols.swift +++ b/enzevalos_iphone/SwiftUI/DisplayProtocols.swift @@ -8,18 +8,25 @@ import Foundation import SwiftUI -//TODO DOcumentView?? StateObject +// TODO: DocumentView?? StateObject /* Here are protocols to display an email, key, address and a contact */ /// Enums enum FolderType { - case Archive, Trash, Inbox, Sent, Draft, Other + case Archive + case Trash + case Inbox + case Sent + case Draft + case Other } enum ResponseType { - case Reply, Forward, Draft + case Reply + case Forward + case Draft func addPrefix(subject: String) -> String { switch self { @@ -38,7 +45,14 @@ enum ResponseType { } enum CryptoState { - case UnableToDecrypt, InvalidSignature, NoCrypto, PlainMissingPublicKeyToVerify, PlainButValidSignature, EncValidSign, EncNoSignature, EncButMissingPublicKeyToVerify + case UnableToDecrypt + case InvalidSignature + case NoCrypto + case PlainMissingPublicKeyToVerify + case PlainButValidSignature + case EncValidSign + case EncNoSignature + case EncButMissingPublicKeyToVerify var buttonActions: [ButtonAction] { get { @@ -54,12 +68,11 @@ enum CryptoState { } } } - - } enum ContactSecurityRating { - case Trustworthy, Forgable + case Trustworthy + case Forgable var name: LocalizedStringKey { switch self { @@ -82,7 +95,6 @@ enum ContactSecurityRating { protocol DisplayKey { - var keyID: String { get } var discovery: Date? { get } var lastSeen: Date? { get } @@ -108,7 +120,7 @@ protocol DisplayAttachment { protocol DisplayContact { associatedtype K: DisplayKey - + // General var name: String { get } var email: String { get } @@ -129,9 +141,7 @@ protocol DisplayContact { } extension DisplayContact { - - - func findAddress(temp: Bool) -> MailAddress { + func findAddress(temp: Bool) -> AddressRecord { if let addr = PersistentDataProvider.dataProvider.fetchedAddressResultController.fetchedObjects?.first { return addr } @@ -176,18 +186,18 @@ protocol DisplayMail { var encryptionType: CryptoScheme? { get } var transportEnc: Bool { get } var signatureKey: K? { get } - + var persistentMail: MailRecord? { get } func markAsRead(isRead: Bool) } extension DisplayMail { - + /* TODO: MORE DIALOGS - //else if (mail.isNewPubKey) {} - // message contained new public key - */ + //else if (mail.isNewPubKey) {} + // message contained new public key + */ var signatureType: CryptoScheme? { get { @@ -199,14 +209,14 @@ extension DisplayMail { get { var key = "" switch evaluateSecurity() { - case (_,.NoCrypto): key = "Security.Dialog.Title.No.Crypto" - case (_, .UnableToDecrypt): key = "Security.Dialog.Title.UnableToDecrypt" - case (_, .InvalidSignature): key = "Security.Dialog.Title.InvalidSignature" - case (_, .PlainMissingPublicKeyToVerify): key = "Security.Dialog.Title.PlainMissingPublicKeyToVerify" - case (_, .PlainButValidSignature): key = "Security.Dialog.Title.Plain+Sig" - case (_, .EncValidSign): key = "Security.Dialog.Title.Enc+Sign" - case (_, .EncNoSignature): key = "Security.Dialog.Title.Enc+NoSign" - case (_, .EncButMissingPublicKeyToVerify): key = "Security.Dialog.Title.EncMissingPublicKeyToVerify" + case (_,.NoCrypto): key = "Security.Dialog.Title.No.Crypto" + case (_, .UnableToDecrypt): key = "Security.Dialog.Title.UnableToDecrypt" + case (_, .InvalidSignature): key = "Security.Dialog.Title.InvalidSignature" + case (_, .PlainMissingPublicKeyToVerify): key = "Security.Dialog.Title.PlainMissingPublicKeyToVerify" + case (_, .PlainButValidSignature): key = "Security.Dialog.Title.Plain+Sig" + case (_, .EncValidSign): key = "Security.Dialog.Title.Enc+Sign" + case (_, .EncNoSignature): key = "Security.Dialog.Title.Enc+NoSign" + case (_, .EncButMissingPublicKeyToVerify): key = "Security.Dialog.Title.EncMissingPublicKeyToVerify" } return NSLocalizedString(key, comment: "") } @@ -258,8 +268,8 @@ extension DisplayMail { case (_, .EncValidSign): color = ThemeManager.encryptedMessageColor() bodyKey = "OnboardingIntroSection.Confidential.description" - // ctaButton -> Ok - + // ctaButton -> Ok + case (_, .UnableToDecrypt): color = ThemeManager.troubleMessageColor() bodyKey = "ReceiveInsecureInfoDecryptionFailed" @@ -355,16 +365,16 @@ extension DisplayMail { get { var result = [DialogStruct] () switch evaluateSecurity() { - case (_, .EncValidSign), (_, .NoCrypto), (_, .PlainButValidSignature), (_, .EncNoSignature): - break // No warning required - case (_, .UnableToDecrypt), (_, .InvalidSignature) , (_, .PlainMissingPublicKeyToVerify), (_, .EncButMissingPublicKeyToVerify): - result.append(dialog) // warning required + case (_, .EncValidSign), (_, .NoCrypto), (_, .PlainButValidSignature), (_, .EncNoSignature): + break // No warning required + case (_, .UnableToDecrypt), (_, .InvalidSignature) , (_, .PlainMissingPublicKeyToVerify), (_, .EncButMissingPublicKeyToVerify): + result.append(dialog) // warning required } if self.sender.primaryKey != nil && self.signatureState == .NoSignature { let icon = Image(systemName: "exclamationmark.triangl.fill") let missingSignature = DialogStruct(dialogColor: Color(ThemeManager.unencryptedMessageColor()), title: NSLocalizedString("encryptedBeforeHeadline", - comment: "encrypted by sender before"), + comment: "encrypted by sender before"), body: NSLocalizedString("encryptedBeforeText", comment: "encrypted by sender before"), img: icon, messageImage: icon, ctaButtonTitle: NSLocalizedString("Security.Dialog.Button.Title.Confirmation", comment: ""), @@ -389,18 +399,18 @@ extension DisplayMail { private func evaluateCryptoState() -> CryptoState { switch (self.encryptionState, self.signatureState) { - // General error cases -> cast other states - case (.UnableToDecrypt, _): return .UnableToDecrypt - case (_, .InvalidSignature): return .InvalidSignature - case (.NoEncryption, .NoSignature): return .NoCrypto - case (.NoEncryption, .NoPublicKey): return .PlainMissingPublicKeyToVerify - case (.NoEncryption, .ValidSignature): return .PlainButValidSignature - case (.ValidEncryptedWithOldKey, .ValidSignature): return .EncValidSign - case (.ValidedEncryptedWithCurrentKey, .ValidSignature): return .EncValidSign - case (.ValidEncryptedWithOldKey, .NoSignature): return .EncNoSignature - case (.ValidEncryptedWithOldKey, .NoPublicKey): return .EncButMissingPublicKeyToVerify - case (.ValidedEncryptedWithCurrentKey, .NoSignature): return .EncNoSignature - case (.ValidedEncryptedWithCurrentKey, .NoPublicKey): return .EncButMissingPublicKeyToVerify + // General error cases -> cast other states + case (.UnableToDecrypt, _): return .UnableToDecrypt + case (_, .InvalidSignature): return .InvalidSignature + case (.NoEncryption, .NoSignature): return .NoCrypto + case (.NoEncryption, .NoPublicKey): return .PlainMissingPublicKeyToVerify + case (.NoEncryption, .ValidSignature): return .PlainButValidSignature + case (.ValidEncryptedWithOldKey, .ValidSignature): return .EncValidSign + case (.ValidedEncryptedWithCurrentKey, .ValidSignature): return .EncValidSign + case (.ValidEncryptedWithOldKey, .NoSignature): return .EncNoSignature + case (.ValidEncryptedWithOldKey, .NoPublicKey): return .EncButMissingPublicKeyToVerify + case (.ValidedEncryptedWithCurrentKey, .NoSignature): return .EncNoSignature + case (.ValidedEncryptedWithCurrentKey, .NoPublicKey): return .EncButMissingPublicKeyToVerify } } @@ -421,15 +431,15 @@ extension DisplayMail { if self.ccs.count > 0 { body.append("\n\(NSLocalizedString("Cc", comment: "")): ") for addr in self.ccs { - body.append("\(addr.email), ") } + body.append("\(addr.email), ") } } body.append("\n" + NSLocalizedString("subject", comment: "describing what subject was choosen") + ": " + (self.subject)) body.append("\n------------------------\n\n" + (self.body)) body = body.components(separatedBy: "\n").map { line in - if line.hasPrefix(">") { - return ">" + line - } - return "> " + line + if line.hasPrefix(">") { + return ">" + line + } + return "> " + line }.reduce("", { $0 + "\n" + $1 }) return body }