Browse Source

get rid of DcConfig

cyberta 5 năm trước cách đây
mục cha
commit
c2c5d56664

+ 5 - 3
deltachat-ios/Controller/AccountSetup/CertificateCheckController.swift

@@ -8,6 +8,7 @@ class CertificateCheckController: UITableViewController {
 
     var currentValue: Int
     var selectedIndex: Int?
+    let dcContext: DcContext
 
     var okButton: UIBarButtonItem {
         let button =  UIBarButtonItem(title: String.localized("ok"), style: .done, target: self, action: #selector(okButtonPressed))
@@ -28,8 +29,9 @@ class CertificateCheckController: UITableViewController {
         })
     }
 
-    init(sectionTitle: String?) {
-        self.currentValue = DcConfig.certificateChecks
+    init(dcContext: DcContext, sectionTitle: String?) {
+        self.dcContext = dcContext
+        self.currentValue = dcContext.certificateChecks
         for (index, value) in options.enumerated() where currentValue == value {
             selectedIndex = index
         }
@@ -94,7 +96,7 @@ class CertificateCheckController: UITableViewController {
     }
 
     @objc private func okButtonPressed() {
-        DcConfig.certificateChecks = currentValue
+        dcContext.certificateChecks = currentValue
         navigationController?.popViewController(animated: true)
     }
 

+ 7 - 5
deltachat-ios/Controller/AccountSetup/SecuritySettingsController.swift

@@ -7,6 +7,7 @@ class SecuritySettingsController: UITableViewController {
     private var selectedIndex: Int
 
     private var securityType: SecurityType
+    private let dcContext: DcContext
 
     private var okButton: UIBarButtonItem {
         let button =  UIBarButtonItem(title: String.localized("ok"), style: .done, target: self, action: #selector(okButtonPressed))
@@ -27,15 +28,16 @@ class SecuritySettingsController: UITableViewController {
         }
     }
 
-    init(title: String, type: SecurityType) {
+    init(dcContext: DcContext, title: String, type: SecurityType) {
         self.securityType = type
+        self.dcContext = dcContext
         switch securityType {
         case .IMAPSecurity:
             options = [0x00, 0x100, 0x200, 0x400]
-            selectedIndex = options.index(of: DcConfig.getImapSecurity()) ?? 0
+            selectedIndex = options.index(of: dcContext.getImapSecurity()) ?? 0
         case .SMTPSecurity:
             options = [0x00, 0x10000, 0x20000, 0x40000]
-            selectedIndex = options.index(of: DcConfig.getSmtpSecurity()) ?? 0
+            selectedIndex = options.index(of: dcContext.getSmtpSecurity()) ?? 0
         }
         super.init(style: .grouped)
         self.title = title
@@ -86,9 +88,9 @@ class SecuritySettingsController: UITableViewController {
     @objc func okButtonPressed() {
         switch securityType {
         case .IMAPSecurity:
-            DcConfig.setImapSecurity(imapFlags: options[selectedIndex])
+            dcContext.setImapSecurity(imapFlags: options[selectedIndex])
         case .SMTPSecurity:
-            DcConfig.setSmtpSecurity(smptpFlags: options[selectedIndex])
+            dcContext.setSmtpSecurity(smptpFlags: options[selectedIndex])
         }
         navigationController?.popViewController(animated: true)
     }

+ 28 - 28
deltachat-ios/Controller/AccountSetupController.swift

@@ -119,7 +119,7 @@ class AccountSetupController: UITableViewController {
         cell.tag = tagEmailCell
         cell.textField.addTarget(self, action: #selector(emailCellEdited), for: .editingChanged)
         cell.textField.tag = tagTextFieldEmail // will be used to eventually show oAuth-Dialogue when pressing return key
-        cell.setText(text: DcConfig.addr ?? nil)
+        cell.setText(text: dcContext.addr ?? nil)
         cell.textField.delegate = self
         cell.textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
         return cell
@@ -130,7 +130,7 @@ class AccountSetupController: UITableViewController {
         cell.tag = tagPasswordCell
         cell.textField.tag = tagTextFieldPassword  // will be used to eventually show oAuth-Dialogue when selecting
         cell.textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
-        cell.setText(text: DcConfig.mailPw ?? nil)
+        cell.setText(text: dcContext.mailPw ?? nil)
         cell.textField.delegate = self
         return cell
     }()
@@ -182,7 +182,7 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.tag = tagImapServerCell
-        cell.setText(text: DcConfig.mailServer ?? nil)
+        cell.setText(text: dcContext.mailServer ?? nil)
         cell.textField.tag = tagTextFieldImapServer
         cell.textField.autocorrectionType = .no
         cell.textField.spellCheckingType = .no
@@ -195,7 +195,7 @@ class AccountSetupController: UITableViewController {
             descriptionID: "login_imap_login",
             placeholder: String.localized("automatic"),
             delegate: self)
-        cell.setText(text: DcConfig.mailUser ?? nil)
+        cell.setText(text: dcContext.mailUser ?? nil)
         cell.textField.tag = tagTextFieldImapLogin
         cell.tag = tagImapUserCell
         return cell
@@ -218,18 +218,18 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.tag = tagImapPortCell
-        cell.setText(text: editablePort(port: DcConfig.mailPort))
+        cell.setText(text: editablePort(port: dcContext.mailPort))
         cell.textField.tag = tagImapPortCell
         cell.textField.keyboardType = .numberPad
         return cell
     }()
 
     lazy var imapSecurityCell: UITableViewCell = {
-        let text = "\(DcConfig.getImapSecurity())"
+        let text = "\(dcContext.getImapSecurity())"
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
         cell.textLabel?.text = String.localized("login_imap_security")
         cell.accessoryType = .disclosureIndicator
-        cell.detailTextLabel?.text = "\(DcConfig.getImapSecurity())"
+        cell.detailTextLabel?.text = "\(dcContext.getImapSecurity())"
         cell.selectionStyle = .none
         cell.tag = tagImapSecurityCell
         return cell
@@ -241,7 +241,7 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.textField.tag = tagTextFieldSmtpServer
-        cell.setText(text: DcConfig.sendServer ?? nil)
+        cell.setText(text: dcContext.sendServer ?? nil)
         cell.tag = tagSmtpServerCell
         cell.textField.autocorrectionType = .no
         cell.textField.spellCheckingType = .no
@@ -255,7 +255,7 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.textField.tag = tagTextFieldSmtpUser
-        cell.setText(text: DcConfig.sendUser ?? nil)
+        cell.setText(text: dcContext.sendUser ?? nil)
         cell.tag = tagSmtpUserCell
         return cell
     }()
@@ -266,7 +266,7 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.tag = tagSmtpPortCell
-        cell.setText(text: editablePort(port: DcConfig.sendPort))
+        cell.setText(text: editablePort(port: dcContext.sendPort))
         cell.textField.tag = tagSmtpPortCell
         cell.textField.keyboardType = .numberPad
         return cell
@@ -278,7 +278,7 @@ class AccountSetupController: UITableViewController {
             placeholder: String.localized("automatic"),
             delegate: self)
         cell.textField.textContentType = UITextContentType.password
-        cell.setText(text: DcConfig.sendPw ?? nil)
+        cell.setText(text: dcContext.sendPw ?? nil)
         cell.textField.isSecureTextEntry = true
         cell.textField.tag = tagTextFieldSmtpPassword
         cell.tag = tagSmtpPasswordCell
@@ -286,7 +286,7 @@ class AccountSetupController: UITableViewController {
     }()
 
     lazy var smtpSecurityCell: UITableViewCell = {
-        let security = "\(DcConfig.getSmtpSecurity())"
+        let security = "\(dcContext.getSmtpSecurity())"
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
         cell.textLabel?.text = String.localized("login_smtp_security")
         cell.detailTextLabel?.text = security
@@ -297,7 +297,7 @@ class AccountSetupController: UITableViewController {
     }()
 
     lazy var certCheckCell: UITableViewCell = {
-        let certCheckType = CertificateCheckController.ValueConverter.convertHexToString(value: DcConfig.certificateChecks)
+        let certCheckType = CertificateCheckController.ValueConverter.convertHexToString(value: dcContext.certificateChecks)
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
         cell.textLabel?.text = String.localized("login_certificate_checks")
         cell.detailTextLabel?.text = certCheckType
@@ -603,14 +603,14 @@ class AccountSetupController: UITableViewController {
     private func login(emailAddress: String, password: String, skipAdvanceSetup: Bool = false) {
         addProgressHudLoginListener()
         resignFirstResponderOnAllCells()	// this will resign focus from all textFieldCells so the keyboard wont pop up anymore
-        DcConfig.addr = emailAddress
-        DcConfig.mailPw = password
+        dcContext.addr = emailAddress
+        dcContext.mailPw = password
 
         if !skipAdvanceSetup {
             evaluateAdvancedSetup() // this will set MRConfig related to advanced fields
         }
 
-        print("oAuth-Flag when loggin in: \(DcConfig.getAuthFlags())")
+        print("oAuth-Flag when loggin in: \(dcContext.getAuthFlags())")
         dc_configure(mailboxPointer)
         showProgressHud(title: String.localized("login_header"))
     }
@@ -672,7 +672,7 @@ class AccountSetupController: UITableViewController {
             return
         }
         passwordCell.setText(text: token)
-        DcConfig.setAuthFlags(flags: Int(DC_LP_AUTH_OAUTH2))
+        dcContext.setAuthFlags(flags: Int(DC_LP_AUTH_OAUTH2))
         login(emailAddress: emailAddress, password: token, skipAdvanceSetup: true)
     }
 
@@ -725,19 +725,19 @@ class AccountSetupController: UITableViewController {
             if let textFieldCell = cell as? TextFieldCell {
                 switch  textFieldCell.tag {
                 case tagImapServerCell:
-                    DcConfig.mailServer = textFieldCell.getText() ?? nil
+                    dcContext.mailServer = textFieldCell.getText() ?? nil
                 case tagImapPortCell:
-                    DcConfig.mailPort = textFieldCell.getText() ?? nil
+                    dcContext.mailPort = textFieldCell.getText() ?? nil
                 case tagImapUserCell:
-                    DcConfig.mailUser = textFieldCell.getText() ?? nil
+                    dcContext.mailUser = textFieldCell.getText() ?? nil
                 case tagSmtpServerCell:
-                    DcConfig.sendServer = textFieldCell.getText() ?? nil
+                    dcContext.sendServer = textFieldCell.getText() ?? nil
                 case tagSmtpPortCell:
-                    DcConfig.sendPort = textFieldCell.getText() ?? nil
+                    dcContext.sendPort = textFieldCell.getText() ?? nil
                 case tagSmtpUserCell:
-                    DcConfig.sendUser = textFieldCell.getText() ?? nil
+                    dcContext.sendUser = textFieldCell.getText() ?? nil
                 case tagSmtpPasswordCell:
-                    DcConfig.sendPw = textFieldCell.getText() ?? nil
+                    dcContext.sendPw = textFieldCell.getText() ?? nil
                 default:
                     logger.info("unknown identifier \(cell.tag)")
                 }
@@ -747,7 +747,7 @@ class AccountSetupController: UITableViewController {
 
     private func restoreBackup() {
         logger.info("restoring backup")
-        if DcConfig.configured {
+        if dcContext.configured {
             return
         }
         addProgressHudBackupListener()
@@ -845,9 +845,9 @@ class AccountSetupController: UITableViewController {
     }
 
     private func initSelectionCells() {
-        smtpSecurityCell.detailTextLabel?.text = SecurityConverter.convertHexToString(type: .SMTPSecurity, hex: DcConfig.getSmtpSecurity())
-        imapSecurityCell.detailTextLabel?.text = SecurityConverter.convertHexToString(type: .IMAPSecurity, hex: DcConfig.getImapSecurity())
-        certCheckCell.detailTextLabel?.text = CertificateCheckController.ValueConverter.convertHexToString(value: DcConfig.certificateChecks)
+        smtpSecurityCell.detailTextLabel?.text = SecurityConverter.convertHexToString(type: .SMTPSecurity, hex: dcContext.getSmtpSecurity())
+        imapSecurityCell.detailTextLabel?.text = SecurityConverter.convertHexToString(type: .IMAPSecurity, hex: dcContext.getImapSecurity())
+        certCheckCell.detailTextLabel?.text = CertificateCheckController.ValueConverter.convertHexToString(value: dcContext.certificateChecks)
     }
 
     private func resignFirstResponderOnAllCells() {

+ 2 - 2
deltachat-ios/Controller/ChatViewController.swift

@@ -97,7 +97,7 @@ class ChatViewController: MessagesViewController {
     override func viewDidLoad() {
         messagesCollectionView.register(InfoMessageCell.self)
         super.viewDidLoad()
-        if !DcConfig.configured {
+        if !dcContext.isConfigured() {
             // TODO: display message about nothing being configured
             return
         }
@@ -325,7 +325,7 @@ class ChatViewController: MessagesViewController {
         if show {
             let dcChat = DcChat(id: chatId)
             if chatId == DC_CHAT_ID_DEADDROP {
-                if DcConfig.showEmails != DC_SHOW_EMAILS_ALL {
+                if dcContext.showEmails != DC_SHOW_EMAILS_ALL {
                     emptyStateView.text = String.localized("chat_no_contact_requests")
                 } else {
                     emptyStateView.text = String.localized("chat_no_messages")

+ 6 - 6
deltachat-ios/Controller/EditSettingsController.swift

@@ -27,7 +27,7 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
 
     private lazy var statusCell: MultilineTextFieldCell = {
         let cell = MultilineTextFieldCell(description: String.localized("pref_default_status_label"),
-                                          multilineText: DcConfig.selfstatus,
+                                          multilineText: dcContext.selfstatus,
                                           placeholder: String.localized("pref_default_status_label"))
         return cell
     }()
@@ -47,7 +47,7 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
 
     private lazy var nameCell: TextFieldCell = {
         let cell = TextFieldCell(description: String.localized("pref_your_name"), placeholder: String.localized("pref_your_name"))
-        cell.setText(text: DcConfig.displayname)
+        cell.setText(text: dcContext.displayname)
         return cell
     }()
 
@@ -68,8 +68,8 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
     }
 
     override func viewWillDisappear(_ animated: Bool) {
-        DcConfig.selfstatus = statusCell.getText()
-        DcConfig.displayname = nameCell.getText()
+        dcContext.selfstatus = statusCell.getText()
+        dcContext.displayname = nameCell.getText()
         dc_configure(mailboxPointer)
     }
 
@@ -149,7 +149,7 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
     }
 
     private func deleteProfileIconPressed(_ action: UIAlertAction) {
-        DcConfig.selfavatar = nil
+        dcContext.selfavatar = nil
         updateAvatarAndNameCell()
     }
 
@@ -170,7 +170,7 @@ class EditSettingsController: UITableViewController, MediaPickerDelegate {
     }
 
     func onImageSelected(image: UIImage) {
-        AvatarHelper.saveSelfAvatarImage(image: image)
+        AvatarHelper.saveSelfAvatarImage(dcContext: dcContext, image: image)
         updateAvatarAndNameCell()
     }
 

+ 1 - 1
deltachat-ios/Controller/GroupChatDetailViewController.swift

@@ -23,7 +23,7 @@ class GroupChatDetailViewController: UIViewController {
     private let sections: [ProfileSections] = [.attachments, .members, .chatActions]
 
     private var currentUser: DcContact? {
-        let myId = groupMemberIds.filter { DcContact(id: $0).email == DcConfig.addr }.first
+        let myId = groupMemberIds.filter { DcContact(id: $0).email == context.addr }.first
         guard let currentUserId = myId else {
             return nil
         }

+ 1 - 1
deltachat-ios/Controller/QrViewController.swift

@@ -11,7 +11,7 @@ class QrViewController: UITableViewController, QrCodeReaderDelegate {
     var dcContext: DcContext
     var contact: DcContact? {
         // This is nil if we do not have an account setup yet
-        if !DcConfig.configured {
+        if !dcContext.isConfigured() {
             return nil
         }
         return DcContact(id: Int(DC_CONTACT_ID_SELF))

+ 3 - 3
deltachat-ios/Controller/SettingsClassicViewController.swift

@@ -55,18 +55,18 @@ class SettingsClassicViewController: UITableViewController {
     }
 
     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let oldSelectedCell = tableView.cellForRow(at: IndexPath.init(row: DcConfig.showEmails, section: 0))
+        let oldSelectedCell = tableView.cellForRow(at: IndexPath.init(row: dcContext.showEmails, section: 0))
         oldSelectedCell?.accessoryType = .none
 
         let newSelectedCell = tableView.cellForRow(at: IndexPath.init(row: indexPath.row, section: 0))
         newSelectedCell?.accessoryType = .checkmark
 
-        DcConfig.showEmails = indexPath.row
+        dcContext.showEmails = indexPath.row
     }
 
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = staticCells[indexPath.row]
-        if options[indexPath.row] == DcConfig.showEmails {
+        if options[indexPath.row] == dcContext.showEmails {
             cell.accessoryType = .checkmark
         }
         return cell

+ 15 - 14
deltachat-ios/Controller/SettingsController.swift

@@ -42,11 +42,11 @@ internal final class SettingsViewController: UITableViewController {
 
     private let profileHeader = ContactDetailHeader()
 
-    private var profileCell: ProfileCell = {
-        let displayName = DcConfig.displayname ?? String.localized("pref_your_name")
-        let email = (DcConfig.addr ?? "")
+    private lazy var profileCell: ProfileCell = {
+        let displayName = dcContext.displayname ?? String.localized("pref_your_name")
+        let email = dcContext.addr ?? ""
         let selfContact = DcContact(id: Int(DC_CONTACT_ID_SELF))
-        let cell = ProfileCell(contact: selfContact)
+        let cell = ProfileCell(contact: selfContact, displayName: displayName, address: email)
         cell.tag = CellTags.profile.rawValue
         return cell
     }()
@@ -59,12 +59,12 @@ internal final class SettingsViewController: UITableViewController {
         return cell
     }()
 
-    private var chatPreferenceCell: UITableViewCell = {
+    private lazy var chatPreferenceCell: UITableViewCell = {
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
         cell.tag = CellTags.preferences.rawValue
         cell.textLabel?.text = String.localized("pref_show_emails")
         cell.accessoryType = .disclosureIndicator
-        cell.detailTextLabel?.text = SettingsClassicViewController.getValString(val: DcConfig.showEmails)
+        cell.detailTextLabel?.text = SettingsClassicViewController.getValString(val: dcContext.showEmails)
         return cell
     }()
 
@@ -94,7 +94,7 @@ internal final class SettingsViewController: UITableViewController {
     private lazy var receiptConfirmationSwitch: UISwitch = {
         let switchControl = UISwitch()
         switchControl.isUserInteractionEnabled = false // toggled by cell tap
-        switchControl.isOn = DcConfig.mdnsEnabled
+        switchControl.isOn = dcContext.mdnsEnabled
         return switchControl
     }()
 
@@ -106,10 +106,10 @@ internal final class SettingsViewController: UITableViewController {
         return cell
     }()
 
-    private var autocryptSwitch: UISwitch = {
+    private lazy var autocryptSwitch: UISwitch = {
         let switchControl = UISwitch()
         switchControl.isUserInteractionEnabled = false // toggled by cell tap
-        switchControl.isOn = DcConfig.e2eeEnabled
+        switchControl.isOn = dcContext.e2eeEnabled
         return switchControl
     }()
 
@@ -320,13 +320,13 @@ internal final class SettingsViewController: UITableViewController {
 
     private func handleReceiptConfirmationToggle() {
         receiptConfirmationSwitch.isOn = !receiptConfirmationSwitch.isOn
-        DcConfig.mdnsEnabled = receiptConfirmationSwitch.isOn
+        dcContext.mdnsEnabled = receiptConfirmationSwitch.isOn
         dc_configure(mailboxPointer)
     }
 
     private func handleAutocryptPreferencesToggle() {
         autocryptSwitch.isOn = !autocryptSwitch.isOn
-        DcConfig.e2eeEnabled = autocryptSwitch.isOn
+        dcContext.e2eeEnabled = autocryptSwitch.isOn
         dc_configure(mailboxPointer)
     }
 
@@ -409,10 +409,11 @@ internal final class SettingsViewController: UITableViewController {
 
     // MARK: - updates
     private func updateCells() {
+        let displayName = dcContext.displayname ?? String.localized("pref_your_name")
+        let email = dcContext.addr ?? ""
         let selfContact = DcContact(id: Int(DC_CONTACT_ID_SELF))
-        profileCell.update(contact: selfContact)
-
-        chatPreferenceCell.detailTextLabel?.text = SettingsClassicViewController.getValString(val: DcConfig.showEmails)
+        profileCell.update(contact: selfContact, displayName: displayName, address: email)
 
+        chatPreferenceCell.detailTextLabel?.text = SettingsClassicViewController.getValString(val: dcContext.showEmails)
     }
 }

+ 5 - 3
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -283,18 +283,20 @@ class AccountSetupCoordinator: Coordinator {
     }
 
     func showCertCheckOptions() {
-        let certificateCheckController = CertificateCheckController(sectionTitle: String.localized("login_certificate_checks"))
+        let certificateCheckController = CertificateCheckController(dcContext: dcContext, sectionTitle: String.localized("login_certificate_checks"))
         navigationController.pushViewController(certificateCheckController, animated: true)
     }
 
     func showImapSecurityOptions() {
-        let securitySettingsController = SecuritySettingsController(title: String.localized("login_imap_security"),
+        let securitySettingsController = SecuritySettingsController(dcContext: dcContext, title: String.localized("login_imap_security"),
                                                                       type: SecurityType.IMAPSecurity)
         navigationController.pushViewController(securitySettingsController, animated: true)
     }
 
     func showSmptpSecurityOptions() {
-        let securitySettingsController = SecuritySettingsController(title: String.localized("login_imap_security"), type: SecurityType.SMTPSecurity)
+        let securitySettingsController = SecuritySettingsController(dcContext: dcContext,
+                                                                    title: String.localized("login_imap_security"),
+                                                                    type: SecurityType.SMTPSecurity)
         navigationController.pushViewController(securitySettingsController, animated: true)
     }
 

+ 42 - 70
deltachat-ios/DC/Wrapper.swift

@@ -186,6 +186,22 @@ class DcContext {
         setConfig(key, vStr)
     }
 
+    func getConfigInt(_ key: String) -> Int {
+        let vStr = getConfig(key)
+        if vStr == nil {
+            return 0
+        }
+        let vInt = Int(vStr!)
+        if vInt == nil {
+            return 0
+        }
+        return vInt!
+    }
+
+    private func setConfigInt(_ key: String, _ value: Int) {
+        setConfig(key, String(value))
+    }
+
     func getUnreadMessages(chatId: Int) -> Int {
         return Int(dc_get_fresh_msg_cnt(contextPointer, UInt32(chatId)))
     }
@@ -199,7 +215,7 @@ class DcContext {
     }
 
     func getSelfAvatarImage() -> UIImage? {
-       guard let fileName = DcConfig.selfavatar else { return nil }
+       guard let fileName = selfavatar else { return nil }
        let path: URL = URL(fileURLWithPath: fileName, isDirectory: false)
        if path.isFileURL {
            do {
@@ -254,9 +270,6 @@ class DcContext {
         let messageIds = Utils.copyAndFreeArray(inputArray: arrayPointer)
         return messageIds
     }
-}
-
-class DcConfig {
 
     // it is fine to use existing functionality of DcConfig,
     // however, as DcConfig uses a global pointer,
@@ -268,110 +281,69 @@ class DcConfig {
     // this adds a complexity that can be avoided -
     // and makes grep harder as these names are typically named following different guidelines.
 
-    private class func getConfig(_ key: String) -> String? {
-        guard let cString = dc_get_config(mailboxPointer, key) else { return nil }
-        let value = String(cString: cString)
-        dc_str_unref(cString)
-        if value.isEmpty {
-            return nil
-        }
-        return value
-    }
 
-    private class func setConfig(_ key: String, _ value: String?) {
-        if let v = value {
-            dc_set_config(mailboxPointer, key, v)
-        } else {
-            dc_set_config(mailboxPointer, key, nil)
-        }
-    }
-
-    private class func getConfigBool(_ key: String) -> Bool {
-        return strToBool(getConfig(key))
-    }
-
-    private class func setConfigBool(_ key: String, _ value: Bool) {
-        let vStr = value ? "1" : "0"
-        setConfig(key, vStr)
-    }
-
-    private class func getConfigInt(_ key: String) -> Int {
-        let vStr = getConfig(key)
-        if vStr == nil {
-            return 0
-        }
-        let vInt = Int(vStr!)
-        if vInt == nil {
-            return 0
-        }
-        return vInt!
-    }
-
-    private class func setConfigInt(_ key: String, _ value: Int) {
-        setConfig(key, String(value))
-    }
 
-    class var displayname: String? {
+    var displayname: String? {
         set { setConfig("displayname", newValue) }
         get { return getConfig("displayname") }
     }
 
-    class var selfstatus: String? {
+    var selfstatus: String? {
         set { setConfig("selfstatus", newValue) }
         get { return getConfig("selfstatus") }
     }
 
-    class var selfavatar: String? {
+    var selfavatar: String? {
         set { setConfig("selfavatar", newValue) }
         get { return getConfig("selfavatar") }
     }
 
-    class var addr: String? {
+    var addr: String? {
         set { setConfig("addr", newValue) }
         get { return getConfig("addr") }
     }
 
-    class var mailServer: String? {
+    var mailServer: String? {
         set { setConfig("mail_server", newValue) }
         get { return getConfig("mail_server") }
     }
 
-    class var mailUser: String? {
+    var mailUser: String? {
         set { setConfig("mail_user", newValue) }
         get { return getConfig("mail_user") }
     }
 
-    class var mailPw: String? {
+    var mailPw: String? {
         set { setConfig("mail_pw", newValue) }
         get { return getConfig("mail_pw") }
     }
 
-    class var mailPort: String? {
+    var mailPort: String? {
         set { setConfig("mail_port", newValue) }
         get { return getConfig("mail_port") }
     }
 
-    class var sendServer: String? {
+    var sendServer: String? {
         set { setConfig("send_server", newValue) }
         get { return getConfig("send_server") }
     }
 
-    class var sendUser: String? {
+    var sendUser: String? {
         set { setConfig("send_user", newValue) }
         get { return getConfig("send_user") }
     }
 
-    class var sendPw: String? {
+    var sendPw: String? {
         set { setConfig("send_pw", newValue) }
         get { return getConfig("send_pw") }
     }
 
-    class var sendPort: String? {
+    var sendPort: String? {
         set { setConfig("send_port", newValue) }
         get { return getConfig("send_port") }
     }
 
-    class var certificateChecks: Int {
+    var certificateChecks: Int {
         set {
             setConfig("smtp_certificate_checks", "\(newValue)")
             setConfig("imap_certificate_checks", "\(newValue)")
@@ -385,7 +357,7 @@ class DcConfig {
         }
     }
 
-    private class var serverFlags: Int {
+    private var serverFlags: Int {
         // IMAP-/SMTP-flags as a combination of DC_LP flags
         set {
             setConfig("server_flags", "\(newValue)")
@@ -399,63 +371,63 @@ class DcConfig {
         }
     }
 
-    class func setImapSecurity(imapFlags flags: Int) {
+    func setImapSecurity(imapFlags flags: Int) {
         var sf = serverFlags
         sf = sf & ~0x700 // DC_LP_IMAP_SOCKET_FLAGS
         sf = sf | flags
         serverFlags = sf
     }
 
-    class func setSmtpSecurity(smptpFlags flags: Int) {
+    func setSmtpSecurity(smptpFlags flags: Int) {
         var sf = serverFlags
         sf = sf & ~0x70000 // DC_LP_SMTP_SOCKET_FLAGS
         sf = sf | flags
         serverFlags = sf
     }
 
-    class func setAuthFlags(flags: Int) {
+    func setAuthFlags(flags: Int) {
         var sf = serverFlags
         sf = sf & ~0x6 // DC_LP_AUTH_FLAGS
         sf = sf | flags
         serverFlags = sf
     }
 
-    class func getImapSecurity() -> Int {
+    func getImapSecurity() -> Int {
         var sf = serverFlags
         sf = sf & 0x700 // DC_LP_IMAP_SOCKET_FLAGS
         return sf
     }
 
-    class func getSmtpSecurity() -> Int {
+    func getSmtpSecurity() -> Int {
         var sf = serverFlags
         sf = sf & 0x70000  // DC_LP_SMTP_SOCKET_FLAGS
         return sf
     }
 
-    class func getAuthFlags() -> Int {
+    func getAuthFlags() -> Int {
         var sf = serverFlags
         sf = sf & 0x6 // DC_LP_AUTH_FLAGS
         return sf
     }
 
-    class var e2eeEnabled: Bool {
+    var e2eeEnabled: Bool {
         set { setConfigBool("e2ee_enabled", newValue) }
         get { return getConfigBool("e2ee_enabled") }
     }
 
-    class var mdnsEnabled: Bool {
+    var mdnsEnabled: Bool {
         set { setConfigBool("mdns_enabled", newValue) }
         get { return getConfigBool("mdns_enabled") }
     }
-    
-    class var showEmails: Int {
+
+    var showEmails: Int {
         // one of DC_SHOW_EMAILS_*
         set { setConfigInt("show_emails", newValue) }
         get { return getConfigInt("show_emails") }
     }
 
     // do not use. use DcContext::isConfigured() instead
-    class var configured: Bool {
+    var configured: Bool {
         return getConfigBool("configured")
     }
 }

+ 2 - 4
deltachat-ios/Helper/AvatarHelper.swift

@@ -9,10 +9,10 @@ class AvatarHelper {
         case runtimeError(String)
     }
 
-    static func saveSelfAvatarImage(image: UIImage) {
+    static func saveSelfAvatarImage(dcContext: DcContext, image: UIImage) {
         do {
             let avatarFile = try saveAvatarImageToFile(image: image)
-            DcConfig.selfavatar = avatarFile.path
+            dcContext.selfavatar = avatarFile.path
             deleteAvatarFile(avatarFile)
         } catch let error {
             logger.error("Error saving Image: \(error.localizedDescription)")
@@ -29,7 +29,6 @@ class AvatarHelper {
         }
     }
 
-
     private static func saveAvatarImageToFile(image: UIImage) throws -> URL {
         if let data = image.jpegData(compressionQuality: 1.0) {
             let filemanager = FileManager.default
@@ -63,5 +62,4 @@ class AvatarHelper {
         }
     }
 
-
 }

+ 4 - 5
deltachat-ios/View/Cell/ProfileCell.swift

@@ -4,11 +4,11 @@ class ProfileCell: UITableViewCell {
 
     private let detailView = ContactDetailHeader()
 
-    init(contact: DcContact) {
+    init(contact: DcContact, displayName: String?, address: String?) {
         super.init(style: .default, reuseIdentifier: nil)
         accessoryType = .disclosureIndicator
         setupSubviews()
-        update(contact: contact)
+        update(contact: contact, displayName: displayName, address: address)
         detailView.backgroundColor = .clear
     }
 
@@ -26,9 +26,8 @@ class ProfileCell: UITableViewCell {
         detailView.heightAnchor.constraint(equalToConstant: ContactDetailHeader.headerHeight).isActive = true
     }
 
-    func update(contact: DcContact) {
-        let displayName = DcConfig.displayname
-        let email = DcConfig.addr ?? contact.email
+    func update(contact: DcContact, displayName: String?, address: String?) {
+        let email = address ?? contact.email
         detailView.updateDetails(title: displayName ?? contact.displayName, subtitle: email)
         if let image = contact.profileImage {
             detailView.setImage(image)