From e9ca20bc4ce24ad6aa84e8c63aae61dd92c09828 Mon Sep 17 00:00:00 2001 From: Oliver Wiese <oliver.wiese@fu-berlin.de> Date: Wed, 17 May 2017 10:05:46 +0200 Subject: [PATCH] still not working finish refactoring --- EnzevalosContact+CoreDataClass.swift | 24 ++++++++--------- PersistentMail +CoreDataClass.swift | 4 +-- .../CNMailAddressesExtension.swift | 13 +++++++++ enzevalos_iphone/DataHandler.swift | 24 ++++++++--------- enzevalos_iphone/Encryption.swift | 21 +++++++-------- .../EnzevalosEncryptionHandler.swift | 2 +- enzevalos_iphone/InboxCellDelegator.swift | 3 ++- enzevalos_iphone/InboxTableViewCell.swift | 4 +-- enzevalos_iphone/InboxViewController.swift | 4 +-- enzevalos_iphone/KeyRecord.swift | 13 ++++----- enzevalos_iphone/ListViewController.swift | 8 +++--- enzevalos_iphone/MailAddress.swift | 3 +++ enzevalos_iphone/MailHandlerDelegator.swift | 3 ++- .../Mail_Address+CoreDataClass.swift | 2 +- .../Mail_Address+CoreDataProperties.swift | 14 +++++----- enzevalos_iphone/PGPEncryption.swift | 25 +++++++++-------- .../PersistentMail +CoreDataProperties.swift | 27 ++++++++++++++++--- enzevalos_iphone/ReadViewController.swift | 12 ++++----- enzevalos_iphone/SendViewController.swift | 6 ++--- 19 files changed, 125 insertions(+), 87 deletions(-) diff --git a/EnzevalosContact+CoreDataClass.swift b/EnzevalosContact+CoreDataClass.swift index 033d2aca..7f50b48f 100644 --- a/EnzevalosContact+CoreDataClass.swift +++ b/EnzevalosContact+CoreDataClass.swift @@ -35,15 +35,15 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { } - open var to: [Mail]{ + open var to: [PersistentMail]{ get{ - var mails = [Mail]() + var mails = [PersistentMail]() if let adrs = addresses{ for adr in adrs{ let a = adr as! Mail_Address if a.to != nil { for m in a.to!{ - mails.append(m as! Mail) + mails.append(m as! PersistentMail) } } } @@ -52,15 +52,15 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { } } - open var bcc: [Mail]{ + open var bcc: [PersistentMail]{ get{ - var mails = [Mail]() + var mails = [PersistentMail]() if let adrs = addresses{ for adr in adrs{ let a = adr as! Mail_Address if a.bcc != nil { for m in a.bcc!{ - mails.append(m as! Mail) + mails.append(m as! PersistentMail) } } } @@ -71,15 +71,15 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { - open var cc: [Mail]{ + open var cc: [PersistentMail]{ get{ - var mails = [Mail]() + var mails = [PersistentMail]() if let adrs = addresses{ for adr in adrs{ let a = adr as! Mail_Address if a.cc != nil { for m in a.cc!{ - mails.append(m as! Mail) + mails.append(m as! PersistentMail) } } } @@ -88,15 +88,15 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { } } - open var from: [Mail]{ + open var from: [PersistentMail]{ get{ - var mails = [Mail]() + var mails = [PersistentMail]() if let adrs = addresses{ for adr in adrs{ let a = adr as! Mail_Address if a.from != nil { for m in a.from!{ - mails.append(m as! Mail) + mails.append(m as! PersistentMail ) } } } diff --git a/PersistentMail +CoreDataClass.swift b/PersistentMail +CoreDataClass.swift index 8cae323d..fea73f0c 100644 --- a/PersistentMail +CoreDataClass.swift +++ b/PersistentMail +CoreDataClass.swift @@ -1,5 +1,5 @@ // -// Mail+CoreDataClass.swift +// PersistentMail+CoreDataClass.swift // enzevalos_iphone // // Created by Oliver Wiese on 27/12/16. @@ -13,7 +13,7 @@ import CoreData @objc(PersistentMail) open class PersistentMail: NSManagedObject, Mail { - + var showMessage: Bool = false var isSecure: Bool { diff --git a/enzevalos_iphone/CNMailAddressesExtension.swift b/enzevalos_iphone/CNMailAddressesExtension.swift index 9cae6987..bddb1c0e 100644 --- a/enzevalos_iphone/CNMailAddressesExtension.swift +++ b/enzevalos_iphone/CNMailAddressesExtension.swift @@ -31,6 +31,19 @@ open class CNMailAddressExtension: MailAddress{ } } + + open var keyID: String?{ + get{ + return nil + } + } + + open var contact: EnzevalosContact?{ + get{ + return nil + } + } + init(addr: CNLabeledValue<NSString>){ //FIXME: NSString hier richtig? self.label = addr } diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift index 30ca2df3..69d50035 100644 --- a/enzevalos_iphone/DataHandler.swift +++ b/enzevalos_iphone/DataHandler.swift @@ -42,7 +42,7 @@ class DataHandler { static let handler: DataHandler = DataHandler() private var managedObjectContext: NSManagedObjectContext - lazy var mails: [Mail] = self.readMails() + lazy var mails: [PersistentMail] = self.readMails() lazy var contacts: [EnzevalosContact] = self.getContacts() lazy var currentstate: State = self.getCurrentState() @@ -147,7 +147,7 @@ class DataHandler { for c in contacts { while c.from.count > MaxMailsPerRecord { let last = c.from.last! - print("delete \(last.uid) of \(last.from.address)") + print("delete \(last.uid) of \(last.from.mailAddress)") managedObjectContext.delete(last) save() if let index = mails.index(of: last) { @@ -318,7 +318,7 @@ class DataHandler { // -------- Start handle to, cc, from addresses -------- - private func handleFromAddress(_ sender: MCOAddress, fromMail: Mail, autocrypt: AutocryptContact?) { + private func handleFromAddress(_ sender: MCOAddress, fromMail: PersistentMail, autocrypt: AutocryptContact?) { let adr: Mail_Address let contact = getContactByMCOAddress(sender) adr = contact.getAddressByMCOAddress(sender)! @@ -329,11 +329,11 @@ class DataHandler { fromMail.from = adr } - private func handleToAddresses(_ receivers: [MCOAddress], mail: Mail) { + private func handleToAddresses(_ receivers: [MCOAddress], mail: PersistentMail) { mail.addToTo(NSSet(array: getMailAddressesByMCOAddresses(receivers))) } - private func handleCCAddresses(_ cc: [MCOAddress], mail: Mail) { + private func handleCCAddresses(_ cc: [MCOAddress], mail: PersistentMail) { mail.addToCc(NSSet(array: getMailAddressesByMCOAddresses(cc))) } @@ -344,11 +344,11 @@ class DataHandler { func createMail(_ uid: UInt64, sender: MCOAddress, receivers: [MCOAddress], cc: [MCOAddress], time: Date, received: Bool, subject: String, body: String, flags: MCOMessageFlag, record: KeyRecord?, autocrypt: AutocryptContact?) /*-> Mail*/ { let finding = findNum("Mail", type: "uid", search: uid) - let mail: Mail + let mail: PersistentMail if finding == nil || finding!.count == 0 { // create new mail object - mail = NSEntityDescription.insertNewObject(forEntityName: "Mail", into: managedObjectContext) as! Mail + mail = NSEntityDescription.insertNewObject(forEntityName: "Mail", into: managedObjectContext) as! PersistentMail mail.body = body mail.date = time @@ -391,12 +391,12 @@ class DataHandler { //return mail } - private func readMails() -> [Mail] { - var mails = [Mail]() + private func readMails() -> [PersistentMail] { + var mails = [PersistentMail]() let result = findAll("Mail") if result != nil { for r in result! { - let m = r as! Mail + let m = r as! PersistentMail mails.append(m) if getCurrentState().maxUID < m.uid { getCurrentState().maxUID = m.uid @@ -449,7 +449,7 @@ class DataHandler { return records } - private func addToRecords(_ m:Mail, records: inout [KeyRecord] ){ + private func addToRecords(_ m: PersistentMail, records: inout [KeyRecord] ){ var found = false for r in records { @@ -501,7 +501,7 @@ class DataHandler { } } - private func addToReceiverRecords(_ m: Mail){ + private func addToReceiverRecords(_ m: PersistentMail){ addToRecords(m, records: &receiverRecords) } diff --git a/enzevalos_iphone/Encryption.swift b/enzevalos_iphone/Encryption.swift index be88b293..2be3e277 100644 --- a/enzevalos_iphone/Encryption.swift +++ b/enzevalos_iphone/Encryption.swift @@ -7,7 +7,6 @@ // public protocol Encryption { - /** * ATTENTION: always have a look at the concrete Encryption you are working with! It my differ in some cases from this definition. e.g. some parameters may be used or unused. * In some functions nil is returned, if there is no answer to be made at the moment. An example for this case is the PGPEncryption. You have to decrypt the message before you can see, if there is a signature @@ -19,41 +18,41 @@ public protocol Encryption { init(encHandler: EncryptionHandler) //check whether this encryption is used in this mail. This means is it used for encryption OR signing. - func isUsed(_ mail: Mail) -> Bool + func isUsed(_ mail: PersistentMail) -> Bool //check whether this encryption is used in this text. This means is it used for encryption OR signing. the key is not known to be used. nil is returned, if there is no answer to be made at the moment. func isUsed(_ text: String, key: KeyWrapper?) -> Bool //check whether this encryption is used in this mail for encryption. nil is returned, if there is no answer to be made at the moment. - func isUsedForEncryption(_ mail: Mail) -> Bool? + func isUsedForEncryption(_ mail: PersistentMail) -> Bool? //check whether this encryption is used in this text for encryption. the key is not known to be used. nil is returned, if there is no answer to be made at the moment. func isUsedForEncryption(_ text: String, key: KeyWrapper?) -> Bool? //check whether this encryption is used in this mail for signing. nil is returned, if there is no answer to be made at the moment. - func isUsedForSignature(_ mail: Mail) -> Bool? + func isUsedForSignature(_ mail: PersistentMail) -> Bool? //check whether this encryption is used in this text for signing. nil is returned, if there is no answer to be made at the moment. func isUsedForSignature(_ text: String, key: KeyWrapper?) -> Bool? //decrypt the mails body. the decryted body will be saved in the mail object. - func decrypt(_ mail: Mail) -> String? + func decrypt(_ mail: PersistentMail) -> String? //decrypt the mails body. the decryted body will be saved in the mail object. //Signaturechecking included. will be set in mail object too. - func decryptAndSignatureCheck(_ mail: Mail) + func decryptAndSignatureCheck(_ mail: PersistentMail) //decrypt the text with the given key and return it. func decrypt(_ text: String, keyID: String) -> String? //check whether the mail is correctly signed with this encryption. nil is returned, if there is no answer to be made at the moment. - func isCorrectlySigned(_ mail: Mail) -> Bool? + func isCorrectlySigned(_ mail: PersistentMail) -> Bool? //check whether the text is correctly signed with this encryption. func isCorrectlySigned(_ text: String, key: KeyWrapper) -> Bool? //encrypt mail for contact - func encrypt(_ mail: Mail) + func encrypt(_ mail: PersistentMail) func encrypt(_ text: String, mailaddresses: [String]) -> Data? @@ -61,13 +60,13 @@ public protocol Encryption { func encrypt(_ text: String, keyIDs: [String]) -> Data? //sign mail - func sign(_ mail: Mail) + func sign(_ mail: PersistentMail) //sign text func sign(_ text: String, key: KeyWrapper) -> String //sign and encrypt mail for contact - func signAndEncrypt(_ mail: Mail, forContact: KeyRecord) + func signAndEncrypt(_ mail: PersistentMail, forContact: KeyRecord) func signAndEncrypt(_ text: String, keyIDs: [String]) -> Data? func signAndEncrypt(_ text: String, mailaddresses: [String]) -> Data? @@ -76,7 +75,7 @@ public protocol Encryption { @discardableResult func addKey(_ keyData: Data, forMailAddresses: [String]?, discoveryMailUID: UInt64?) -> String? //key is connected to the senders address, if discoveryMail is set - @discardableResult func addKey(_ keyData: Data, discoveryMail: Mail?) -> String? + @discardableResult func addKey(_ keyData: Data, discoveryMail: PersistentMail?) -> String? //will be maybe deleted... because keyWrapper will be added when constructed //func addKey(key: KeyWrapper, forMailAddress: [String]?, callBack: ((success: Bool) -> Void)?) diff --git a/enzevalos_iphone/EnzevalosEncryptionHandler.swift b/enzevalos_iphone/EnzevalosEncryptionHandler.swift index 1a664fa5..6ee0137f 100644 --- a/enzevalos_iphone/EnzevalosEncryptionHandler.swift +++ b/enzevalos_iphone/EnzevalosEncryptionHandler.swift @@ -57,7 +57,7 @@ class EnzevalosEncryptionHandler : EncryptionHandler { - static func getEncryptionTypeForMail(_ mail: Mail) -> EncryptionType { + static func getEncryptionTypeForMail(_ mail: PersistentMail) -> EncryptionType { for (type, enc) in encryptions { if enc.isUsed(mail) { return type diff --git a/enzevalos_iphone/InboxCellDelegator.swift b/enzevalos_iphone/InboxCellDelegator.swift index 8989b99f..355d6365 100644 --- a/enzevalos_iphone/InboxCellDelegator.swift +++ b/enzevalos_iphone/InboxCellDelegator.swift @@ -7,7 +7,8 @@ // protocol InboxCellDelegator { - func callSegueFromCell(_ mail: Mail?) + + func callSegueFromCell(_ mail: PersistentMail?) func callSegueFromCell2(_ contact: KeyRecord?) func callSegueToContact(_ contact: KeyRecord?) } diff --git a/enzevalos_iphone/InboxTableViewCell.swift b/enzevalos_iphone/InboxTableViewCell.swift index 96456505..34654e20 100644 --- a/enzevalos_iphone/InboxTableViewCell.swift +++ b/enzevalos_iphone/InboxTableViewCell.swift @@ -102,7 +102,7 @@ class InboxTableViewCell: UITableViewCell { } } - var firstMail: Mail? { + var firstMail: PersistentMail? { didSet { if let mail = firstMail { if !mail.isRead { @@ -120,7 +120,7 @@ class InboxTableViewCell: UITableViewCell { } } - var secondMail: Mail? { + var secondMail: PersistentMail? { didSet { if let mail = secondMail { if !mail.isRead { diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift index 50812ee3..07879cc6 100644 --- a/enzevalos_iphone/InboxViewController.swift +++ b/enzevalos_iphone/InboxViewController.swift @@ -144,7 +144,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { return 0.01 } - func callSegueFromCell(_ mail: Mail?) { + func callSegueFromCell(_ mail: PersistentMail?) { performSegue(withIdentifier: "readMailSegue", sender: mail) } @@ -160,7 +160,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "readMailSegue" { - if let mail = sender as? Mail { + if let mail = sender as? PersistentMail { let DestinationViewController: ReadViewController = segue.destination as! ReadViewController DestinationViewController.mail = mail } diff --git a/enzevalos_iphone/KeyRecord.swift b/enzevalos_iphone/KeyRecord.swift index 6a58dccc..77f76036 100644 --- a/enzevalos_iphone/KeyRecord.swift +++ b/enzevalos_iphone/KeyRecord.swift @@ -11,6 +11,7 @@ import Contacts import UIKit open class KeyRecord: Record { + /* A record contains a signing key (or none because of insecure communication), a contact (inlucding mail-addresses) and mails. For each key we have a different record for mailboxes. Mails and contact are affliate with the key. @@ -42,7 +43,7 @@ open class KeyRecord: Record { } - open var mails: [Mail] = [Mail]() + open var mails: [PersistentMail] = [PersistentMail]() open var ezContact: EnzevalosContact @@ -59,7 +60,7 @@ open class KeyRecord: Record { } - public init(mail: Mail) { + public init(mail: PersistentMail) { self.isSecure = mail.isSecure if(mail.isSecure && mail.from.hasKey) { self.key = mail.from.keyID @@ -69,7 +70,7 @@ open class KeyRecord: Record { } mails.append(mail) mails.sort() - self.ezContact = mail.from.contact + self.ezContact = mail.from.contact! _ = addNewAddress(mail.from) } @@ -116,7 +117,7 @@ open class KeyRecord: Record { open func showInfos() { print("-----------------") print("Name: \(ezContact.displayname) | State: \(hasKey) | #Mails: \(mails.count)") - print("First mail: \(mails.first?.uid) | Adr: \(mails.first?.from.address) | date: \(mails.first?.date.description) ") + print("First mail: \(mails.first?.uid) | Adr: \(mails.first?.from.mailAddress) | date: \(mails.first?.date.description) ") print("subj: \(mails.first?.subject?.capitalized)") } @@ -130,7 +131,7 @@ open class KeyRecord: Record { return true } - open func addNewMail(_ mail: Mail) -> Bool { + open func addNewMail(_ mail: PersistentMail) -> Bool { // TODO: signed only mails are dropped ?? if mail.isSecure && self.isSecure { if mail.from.keyID == self.key { @@ -146,7 +147,7 @@ open class KeyRecord: Record { return false } - if ezContact.getAddress(mail.from.address) != nil { + if ezContact.getAddress(mail.from.mailAddress) != nil { for m in mails { if m.uid == mail.uid { return true diff --git a/enzevalos_iphone/ListViewController.swift b/enzevalos_iphone/ListViewController.swift index 28c7a4cc..2017fc75 100644 --- a/enzevalos_iphone/ListViewController.swift +++ b/enzevalos_iphone/ListViewController.swift @@ -46,7 +46,7 @@ fileprivate func >= <T : Comparable>(lhs: T?, rhs: T?) -> Bool { class ListViewController: UITableViewController { let searchController = UISearchController(searchResultsController: nil) - var filteredMails = [Mail]() + var filteredMails = [PersistentMail]() var contact: KeyRecord? { didSet { self.title = contact!.name @@ -160,7 +160,7 @@ class ListViewController: UITableViewController { } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let mail: Mail? + let mail: PersistentMail? if searchController.isActive && searchController.searchBar.text != "" { mail = filteredMails[indexPath.row] @@ -186,7 +186,7 @@ class ListViewController: UITableViewController { } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let mail: Mail? + let mail: PersistentMail? if searchController.isActive && searchController.searchBar.text != "" { mail = filteredMails[indexPath.row] @@ -218,7 +218,7 @@ class ListViewController: UITableViewController { override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "readMailSegue" { - if let mail = sender as? Mail { + if let mail = sender as? PersistentMail { let DestinationViewController: ReadViewController = segue.destination as! ReadViewController DestinationViewController.mail = mail } diff --git a/enzevalos_iphone/MailAddress.swift b/enzevalos_iphone/MailAddress.swift index 0f2f0a2c..a0362417 100644 --- a/enzevalos_iphone/MailAddress.swift +++ b/enzevalos_iphone/MailAddress.swift @@ -14,4 +14,7 @@ public protocol MailAddress { var label: CNLabeledValue<NSString>{get} //FIXME: ist der NSString hier wirklich richtig? (http://stackoverflow.com/questions/39648830/how-to-add-new-email-to-cnmutablecontact-in-swift-3) var prefEnc: Bool{get set} var hasKey: Bool{get} + + var keyID: String?{get} + var contact: EnzevalosContact?{get} } diff --git a/enzevalos_iphone/MailHandlerDelegator.swift b/enzevalos_iphone/MailHandlerDelegator.swift index a72c196b..2d920f9d 100644 --- a/enzevalos_iphone/MailHandlerDelegator.swift +++ b/enzevalos_iphone/MailHandlerDelegator.swift @@ -9,6 +9,7 @@ import Foundation protocol MailHandlerDelegator { - func addNewMail(_ mail: Mail) + + func addNewMail(_ mail: PersistentMail) func getMailCompleted() } diff --git a/enzevalos_iphone/Mail_Address+CoreDataClass.swift b/enzevalos_iphone/Mail_Address+CoreDataClass.swift index cdc4d629..b60cb98e 100644 --- a/enzevalos_iphone/Mail_Address+CoreDataClass.swift +++ b/enzevalos_iphone/Mail_Address+CoreDataClass.swift @@ -19,7 +19,7 @@ open class Mail_Address: NSManagedObject, MailAddress { } open var label: CNLabeledValue<NSString> { //Wie in MailAddress; Ist der NSString hier richtig? (http://stackoverflow.com/questions/39648830/how-to-add-new-email-to-cnmutablecontact-in-swift-3) - if let cnc = self.contact.cnContact { + if let cnc = self.contact?.cnContact { for adr in cnc.emailAddresses { if adr.value as String == address { return adr diff --git a/enzevalos_iphone/Mail_Address+CoreDataProperties.swift b/enzevalos_iphone/Mail_Address+CoreDataProperties.swift index 0bd743e9..3740481d 100644 --- a/enzevalos_iphone/Mail_Address+CoreDataProperties.swift +++ b/enzevalos_iphone/Mail_Address+CoreDataProperties.swift @@ -19,7 +19,7 @@ extension Mail_Address { @NSManaged public var address: String @NSManaged public var prefer_encryption: Bool - @NSManaged public var contact: EnzevalosContact + @NSManaged public var contact: EnzevalosContact? public var encryptionType: EncryptionType{ set { @@ -51,10 +51,10 @@ extension Mail_Address { extension Mail_Address { @objc(addBccObject:) - @NSManaged public func addToBcc(_ value: Mail) + @NSManaged public func addToBcc(_ value: PersistentMail) @objc(removeBccObject:) - @NSManaged public func removeFromBcc(_ value: Mail) + @NSManaged public func removeFromBcc(_ value: PersistentMail) @objc(addBcc:) @NSManaged public func addToBcc(_ values: NSSet) @@ -68,10 +68,10 @@ extension Mail_Address { extension Mail_Address { @objc(addCcObject:) - @NSManaged public func addToCc(_ value: Mail) + @NSManaged public func addToCc(_ value: PersistentMail) @objc(removeCcObject:) - @NSManaged public func removeFromCc(_ value: Mail) + @NSManaged public func removeFromCc(_ value: PersistentMail) @objc(addCc:) @NSManaged public func addToCc(_ values: NSSet) @@ -85,10 +85,10 @@ extension Mail_Address { extension Mail_Address { @objc(addToObject:) - @NSManaged public func addToTo(_ value: Mail) + @NSManaged public func addToTo(_ value: PersistentMail) @objc(removeToObject:) - @NSManaged public func removeFromTo(_ value: Mail) + @NSManaged public func removeFromTo(_ value: PersistentMail) @objc(addTo:) @NSManaged public func addToTo(_ values: NSSet) diff --git a/enzevalos_iphone/PGPEncryption.swift b/enzevalos_iphone/PGPEncryption.swift index 53d96bf2..a5d8e0fb 100644 --- a/enzevalos_iphone/PGPEncryption.swift +++ b/enzevalos_iphone/PGPEncryption.swift @@ -8,7 +8,6 @@ class PGPEncryption : Encryption { - internal let encryptionHandler: EncryptionHandler internal let keyManager: PGPKeyManagement //internal let keyIDs : [] @@ -28,7 +27,7 @@ class PGPEncryption : Encryption { return keyManager } - func isUsed(_ mail: Mail) -> Bool { + func isUsed(_ mail: PersistentMail) -> Bool { if let plain = mail.body { return isUsed(plain, key: nil) } @@ -44,7 +43,7 @@ class PGPEncryption : Encryption { } //check whether this encryption is used in this mail for encryption. nil is returned, if there is no answer to be made at the moment. - func isUsedForEncryption(_ mail: Mail) -> Bool? { + func isUsedForEncryption(_ mail: PersistentMail) -> Bool? { if let plain = mail.body { return isUsedForEncryption(plain, key: nil) } @@ -58,7 +57,7 @@ class PGPEncryption : Encryption { } //check whether this encryption is used in this mail for signing. nil is returned, if there is no answer to be made at the moment. - func isUsedForSignature(_ mail: Mail) -> Bool?{ + func isUsedForSignature(_ mail: PersistentMail) -> Bool?{ //TODO api-check //baut auf der Annahme auf, dass der signierte Teil nach dem entschlüsseln noch vorhanden ist. if let plain = mail.decryptedBody { @@ -81,7 +80,7 @@ class PGPEncryption : Encryption { //TODO //decrypt the mails body. the decryted body will be saved in the mail object. - func decrypt(_ mail: Mail)-> String?{ + func decrypt(_ mail: PersistentMail)-> String?{ if self.isUsed(mail) { let bodyData = mail.body!.data(using: String.Encoding.utf8)! var data = try? keyManager.pgp.decryptData(bodyData, passphrase: nil) @@ -122,7 +121,7 @@ class PGPEncryption : Encryption { return nil } - func decryptAndSignatureCheck(_ mail: Mail) { + func decryptAndSignatureCheck(_ mail: PersistentMail) { if self.isUsed(mail) { let bodyData = mail.body!.data(using: String.Encoding.utf8)! var data: Data? @@ -152,7 +151,7 @@ class PGPEncryption : Encryption { } if let unwrappedData = data { mail.decryptedBody = String(data: unwrappedData, encoding: String.Encoding.utf8) - if let allKeyIDs = self.keyManager.getKeyIDsForMailAddress(mail.from.address), let theirKeyID = temp.incompleteKeyID { + if let allKeyIDs = self.keyManager.getKeyIDsForMailAddress(mail.from.mailAddress), let theirKeyID = temp.incompleteKeyID { maybeUsedKeys = self.getLibaryKeyIDOverlap(theirKeyID, ourKeyIDs: allKeyIDs) } for maybeUsedKey in maybeUsedKeys { @@ -207,7 +206,7 @@ class PGPEncryption : Encryption { //TODO //check whether the mail is correctly signed with this encryption. nil is returned, if there is no answer to be made at the moment. - func isCorrectlySigned(_ mail: Mail) -> Bool?{ + func isCorrectlySigned(_ mail: PersistentMail) -> Bool?{ return false } @@ -219,7 +218,7 @@ class PGPEncryption : Encryption { //TODO //encrypt mail for contact - func encrypt(_ mail: Mail){ + func encrypt(_ mail: PersistentMail){ } @@ -268,7 +267,7 @@ class PGPEncryption : Encryption { //TODO //sign mail - func sign(_ mail: Mail){ + func sign(_ mail: PersistentMail){ } @@ -280,7 +279,7 @@ class PGPEncryption : Encryption { //TODO //sign and encrypt mail for contact - func signAndEncrypt(_ mail: Mail, forContact: KeyRecord){ + func signAndEncrypt(_ mail: PersistentMail, forContact: KeyRecord){ } @@ -364,12 +363,12 @@ class PGPEncryption : Encryption { } //chooses first key in data. others will be ignored - func addKey(_ keyData: Data, discoveryMail: Mail?) -> String? { + func addKey(_ keyData: Data, discoveryMail: PersistentMail?) -> String? { var discoveryMailUID: UInt64? = nil var forMailAddresses: [String]? = nil if let mail = discoveryMail { discoveryMailUID = mail.uid - forMailAddresses = [mail.from.address] + forMailAddresses = [mail.from.mailAddress] } return self.addKey(keyData, forMailAddresses: forMailAddresses, discoveryMailUID: discoveryMailUID) } diff --git a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift index 30ebf976..7d3bd43c 100644 --- a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift +++ b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift @@ -1,5 +1,5 @@ // -// Mail+CoreDataProperties.swift +// PersistentMail+CoreDataProperties.swift // enzevalos_iphone // // Created by Oliver Wiese on 04/01/17. @@ -13,7 +13,7 @@ import CoreData extension PersistentMail { @nonobjc open override class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> { - return NSFetchRequest(entityName: "Mail"); + return NSFetchRequest(entityName: "PersistentMail"); } @NSManaged public var body: String? @@ -77,9 +77,30 @@ extension PersistentMail { return text! } } + + + public var from: MailAddress{ + set { + if newValue is Mail_Address{ + let adr = newValue as! Mail_Address + self.willChangeValue(forKey: "from") + self.setValue(adr, forKey: "from" ) + self.didChangeValue(forKey: "from") + } + + } + get { + self.willAccessValue(forKey: "from") + let text = (self.primitiveValue(forKey: "from") as? Mail_Address) + self.didAccessValue(forKey: "from") + return text as! MailAddress + } + + } + @NSManaged public var bcc: NSSet? @NSManaged public var cc: NSSet? - @NSManaged public var from: Mail_Address + //@NSManaged public var from: Mail_Address @NSManaged public var to: NSSet } diff --git a/enzevalos_iphone/ReadViewController.swift b/enzevalos_iphone/ReadViewController.swift index caf876a0..38416c1a 100644 --- a/enzevalos_iphone/ReadViewController.swift +++ b/enzevalos_iphone/ReadViewController.swift @@ -36,7 +36,7 @@ class ReadViewController: UITableViewController { var VENDelegate: ReadVENDelegate? - var mail: Mail? = nil + var mail: PersistentMail? = nil override func viewDidLoad() { super.viewDidLoad() @@ -127,7 +127,7 @@ class ReadViewController: UITableViewController { override func numberOfSections(in tableView: UITableView) -> Int { if let mail = mail { - if mail.trouble && mail.showMessage || !mail.trouble && !mail.isSecure && mail.from.contact.hasKey || mail.isEncrypted && mail.unableToDecrypt { + if mail.trouble && mail.showMessage || !mail.trouble && !mail.isSecure && mail.from.contact!.hasKey || mail.isEncrypted && mail.unableToDecrypt { return 3 } } @@ -252,10 +252,10 @@ class ReadViewController: UITableViewController { } } - senderTokenField.delegate?.tokenField!(senderTokenField, didEnterText: m.from.contact.displayname!, mail: m.from.address) + senderTokenField.delegate?.tokenField!(senderTokenField, didEnterText: (m.from.contact?.displayname!)!, mail: m.from.mailAddress) for receiver in m.getReceivers() { - if let displayname = receiver.contact.displayname { + if let displayname = receiver.contact?.displayname { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: displayname, mail: receiver.address) } else { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: receiver.address, mail: receiver.address) @@ -263,7 +263,7 @@ class ReadViewController: UITableViewController { } for receiver in m.getCCs() { - if let displayname = receiver.contact.displayname { + if let displayname = receiver.contact?.displayname { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: displayname, mail: receiver.address) } else { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: receiver.address, mail: receiver.address) @@ -271,7 +271,7 @@ class ReadViewController: UITableViewController { } for receiver in m.getBCCs() { - if let displayname = receiver.contact.displayname { + if let displayname = receiver.contact?.displayname { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: displayname, mail: receiver.address) } else { toTokenField.delegate?.tokenField!(toTokenField, didEnterText: receiver.address, mail: receiver.address) diff --git a/enzevalos_iphone/SendViewController.swift b/enzevalos_iphone/SendViewController.swift index dae69842..7f7a45e2 100644 --- a/enzevalos_iphone/SendViewController.swift +++ b/enzevalos_iphone/SendViewController.swift @@ -49,7 +49,7 @@ class SendViewController: UIViewController { var collectionDataDelegate = CollectionDataDelegate(suggestionFunc: AddressHandler.frequentAddresses, insertCallback: { (name: String, address: String) -> Void in return }) var recognizer: UIGestureRecognizer = UIGestureRecognizer.init() - var answerTo: Mail? = nil + var answerTo: PersistentMail? = nil var toField: String? = nil override func viewDidLoad() { @@ -96,7 +96,7 @@ class SendViewController: UIViewController { let ezCon = DataHandler.handler.getContactByAddress(to) toText.delegate?.tokenField!(toText, didEnterText: ezCon.name, mail: to) } else if answerTo != nil { - toText.delegate?.tokenField!(toText, didEnterText: (answerTo?.from.address)!) + toText.delegate?.tokenField!(toText, didEnterText: (answerTo?.from.mailAddress)!) for r in (answerTo?.getReceivers())! { if r.address != UserManager.loadUserValue(Attribute.userAddr) as! String { ccText.delegate?.tokenField!(ccText, didEnterText: r.address) @@ -104,7 +104,7 @@ class SendViewController: UIViewController { } subjectText.setText(NSLocalizedString("Re", comment: "prefix for subjects of answered mails") + ": " + (answerTo?.subject!)!) textView.text = NSLocalizedString("mail from", comment: "describing who send the mail") + " " - textView.text.append((answerTo?.from.address)!) + textView.text.append((answerTo?.from.mailAddress)!) textView.text.append(" " + NSLocalizedString("sent at", comment: "describing when the mail was send") + " " + (answerTo?.timeString)!) textView.text.append("\n" + NSLocalizedString("to", comment: "describing adressee") + ": ") textView.text.append(UserManager.loadUserValue(Attribute.userAddr) as! String) -- GitLab