diff --git a/EnzevalosContact+CoreDataClass.swift b/EnzevalosContact+CoreDataClass.swift index 033d2aca2d3234a874d508eb2af5b8e12564582f..7f50b48fc098f71f9416410da21a53260bc8d64e 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 8cae323df3c16c3e749c14a546acb17ccf062607..fea73f0c92d4a507c599a8ecd469db5c897bad09 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 9cae698777d25db9c23bc4effc856650c1617575..bddb1c0e7ae263f5f30f25902d3fe91b4627114b 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 30ca2df3125f495b5f941f9611aca9b36e8da91a..69d50035f01fd547ad40dbc628fead24d4aaff70 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 be88b2933e0dfba21f54ecf34b64d9d904ec5785..2be3e2771b0b828528fe5d00ae24686c06c345d9 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 1a664fa56f3098b9c90652346b8914f61f9ed645..6ee0137f81d7565e7bd42a87be5c2fe7968c2561 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 8989b99f958db5fd8ce5837c1261f0a6b1a4258a..355d636530938689f4402825930586081abfe1d4 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 9645650551ad2698ec9eab8114b7f5a70a75d6f9..34654e206626e173a3683bda2151723c6e78104f 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 50812ee312d39521f4857d06c25284eca3ecbafc..07879cc6bc902b7dd2bf7e4636a52c6f76529024 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 6a58dccc86c06fafc76c52a83b40b2015328595a..77f7603634393394bd44032ba4e9ee832c1c1a1a 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 28c7a4cc1d717b879065d1d4d32b4f5cea7d95b1..2017fc7589701a13701adc0ebd29bb5032d02ccd 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 0f2f0a2c3451efbaffe5d429bb5503116f0d1cdd..a0362417787d95f7c6b6343a0c1f42af8fa1f634 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 a72c196b3532cc554240d26791dcbde539d32dc5..2d920f9dcb7ed886803c7503e19fac92ed642054 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 cdc4d629ccefd85fb4574c07eea192669aa9f5a2..b60cb98e5281fd58172b90b54cfc679a15f4d852 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 0bd743e93fcf1007dfb30661641faff05c3becaf..3740481dd736e6f1bfff57e7b1948f59250208bc 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 53d96bf212ff061662f0077c10865dd36c576cbc..a5d8e0fb53a2cd2a63e74a35f86a8d37be21a55c 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 30ebf976fd75843360c112d0ea26d05a06ae374c..7d3bd43cf463eeedbfb438b51b31a5ca308baee4 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 caf876a01744e4cd6e19ad0c49cc2439d78072e3..38416c1aa9b91dcf33e0c178d8cb7b3eedd8d75b 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 dae69842b01f9edf1ef76f349f5c96322487840c..7f7a45e2c22659b28461c34b785c7ac3b9c19bb2 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)