import Foundation
import MBProgressHUD
import ThreemaMacros
final class LinkEmailViewController: ThemedTableViewController {
@IBOutlet var emailTextFieldTitle: UILabel!
@IBOutlet var emailTextField: UITextField!
var serverName = ""
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = #localize("link_email_title")
navigationItem.rightBarButtonItem?.title = #localize("save")
navigationItem.leftBarButtonItem?.title = #localize("cancel")
emailTextField.placeholder = #localize("link_email_textfield_placeholder")
emailTextFieldTitle.text = #localize("link_email_textfield_title")
emailTextField.keyboardAppearance = UIKeyboardAppearance.default
emailTextFieldTitle.textColor = .label
ServerInfoProviderFactory.makeServerInfoProvider()
.directoryServer(ipv6: UserSettings.shared().enableIPv6) { directoryServerInfo, _ in
if let urlString = directoryServerInfo?.url,
let url = URL(string: urlString) {
self.serverName = url.host ?? ""
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
emailTextField.text = MyIdentityStore.shared().linkedEmail
if let mdmSetup = MDMSetup(), mdmSetup.readonlyProfile() {
emailTextField.isEnabled = false
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if emailTextField.isEnabled {
emailTextField.becomeFirstResponder()
}
}
// MARK: - TableViewDelegates
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
if TargetManager.isOnPrem {
return String.localizedStringWithFormat(
#localize("myprofile_link_email_onprem_footer"),
serverName,
TargetManager.appName
)
}
return String.localizedStringWithFormat(
#localize("myprofile_link_email_footer"),
TargetManager.appName
)
}
// MARK: - Helper functions
@IBAction func saveAction(_ sender: Any) {
if emailTextField.text == MyIdentityStore.shared().linkedEmail {
dismiss(animated: true, completion: nil)
return
}
navigationItem.rightBarButtonItem?.isEnabled = false
emailTextField.resignFirstResponder()
MBProgressHUD.showAdded(to: view, animated: true)
let conn = ServerAPIConnector()
conn.linkEmail(
with: MyIdentityStore.shared(),
email: emailTextField.text,
onCompletion: { [self] linked in
MBProgressHUD.hide(for: view, animated: true)
if let text = emailTextField.text, !text.isEmpty, !linked {
UIAlertTemplate.showOKAlert(
owner: self,
title: #localize("link_email_sent_title"),
message: String.localizedStringWithFormat(
#localize("link_email_sent_message"), text
), actionOk: { [self] _ in
dismiss(animated: true)
}
)
}
else {
dismiss(animated: true, completion: nil)
}
}, onError: { _ in
MBProgressHUD.hide(for: self.view, animated: true)
self.navigationItem.rightBarButtonItem?.isEnabled = true
UIAlertTemplate.showOKAlert(
owner: self,
title: #localize("invalid_email_address_title"),
message: #localize("invalid_email_address_message"),
actionOk: nil
)
}
)
}
@IBAction func cancelAction(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
}
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland