Observe wizard creation via notifications
Flow is too scattered to safely maintain delegation.
This commit is contained in:
parent
fa59b8b5f9
commit
326c5b823d
|
@ -126,14 +126,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDele
|
||||||
wizard.parsedFile = parsedFile
|
wizard.parsedFile = parsedFile
|
||||||
wizard.removesConfigurationOnCancel = true
|
wizard.removesConfigurationOnCancel = true
|
||||||
|
|
||||||
// best effort to delegate to main vc
|
|
||||||
let split = root as? UISplitViewController
|
|
||||||
let master = split?.viewControllers.first as? UINavigationController
|
|
||||||
master?.viewControllers.forEach {
|
|
||||||
if let organizerVC = $0 as? OrganizerViewController {
|
|
||||||
wizard.delegate = organizerVC
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nav.modalPresentationStyle = .formSheet
|
nav.modalPresentationStyle = .formSheet
|
||||||
root.present(nav, animated: true, completion: nil)
|
root.present(nav, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,6 @@ class ImportedHostsViewController: UITableViewController {
|
||||||
|
|
||||||
private var parsedFile: ParsedFile?
|
private var parsedFile: ParsedFile?
|
||||||
|
|
||||||
weak var wizardDelegate: WizardDelegate?
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
@ -104,7 +102,6 @@ class ImportedHostsViewController: UITableViewController {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
wizard.parsedFile = parsedFile
|
wizard.parsedFile = parsedFile
|
||||||
wizard.delegate = wizardDelegate
|
|
||||||
|
|
||||||
// retain back button
|
// retain back button
|
||||||
wizard.navigationItem.leftBarButtonItem = nil
|
wizard.navigationItem.leftBarButtonItem = nil
|
||||||
|
|
|
@ -69,6 +69,10 @@ class OrganizerViewController: UITableViewController, TableModelHost {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: UIViewController
|
// MARK: UIViewController
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
NotificationCenter.default.removeObserver(self)
|
||||||
|
}
|
||||||
|
|
||||||
override func awakeFromNib() {
|
override func awakeFromNib() {
|
||||||
super.awakeFromNib()
|
super.awakeFromNib()
|
||||||
|
@ -90,6 +94,8 @@ class OrganizerViewController: UITableViewController, TableModelHost {
|
||||||
}
|
}
|
||||||
|
|
||||||
service.delegate = self
|
service.delegate = self
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(wizardDidCreate(notification:)), name: .WizardDidCreate, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
@ -134,13 +140,8 @@ class OrganizerViewController: UITableViewController, TableModelHost {
|
||||||
assert(selectedProfile != nil, "No selected profile")
|
assert(selectedProfile != nil, "No selected profile")
|
||||||
|
|
||||||
vc.profile = selectedProfile
|
vc.profile = selectedProfile
|
||||||
} else if let vc = destination as? Wizard {
|
} else if let providerVC = destination as? WizardProviderViewController {
|
||||||
if let providerVC = vc as? WizardProviderViewController {
|
providerVC.availableNames = availableProviderNames ?? []
|
||||||
providerVC.availableNames = availableProviderNames ?? []
|
|
||||||
}
|
|
||||||
vc.delegate = self
|
|
||||||
} else if let vc = destination as? ImportedHostsViewController {
|
|
||||||
vc.wizardDelegate = self
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,8 +437,14 @@ extension OrganizerViewController: ConnectionServiceDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension OrganizerViewController: WizardDelegate {
|
extension OrganizerViewController {
|
||||||
func wizard(didCreate profile: ConnectionProfile, withCredentials credentials: Credentials) {
|
@objc private func wizardDidCreate(notification: Notification) {
|
||||||
|
guard let profile = notification.userInfo?[WizardCreationKey.profile] as? ConnectionProfile,
|
||||||
|
let credentials = notification.userInfo?[WizardCreationKey.credentials] as? Credentials else {
|
||||||
|
|
||||||
|
fatalError("WizardDidCreate notification must post profile and credentials")
|
||||||
|
}
|
||||||
|
|
||||||
service.addOrReplaceProfile(profile, credentials: credentials)
|
service.addOrReplaceProfile(profile, credentials: credentials)
|
||||||
TransientStore.shared.serialize() // add
|
TransientStore.shared.serialize() // add
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import SwiftyBeaver
|
||||||
|
|
||||||
private let log = SwiftyBeaver.self
|
private let log = SwiftyBeaver.self
|
||||||
|
|
||||||
class WizardHostViewController: UITableViewController, TableModelHost, Wizard {
|
class WizardHostViewController: UITableViewController, TableModelHost {
|
||||||
@IBOutlet private weak var itemNext: UIBarButtonItem!
|
@IBOutlet private weak var itemNext: UIBarButtonItem!
|
||||||
|
|
||||||
private let existingHosts: [String] = {
|
private let existingHosts: [String] = {
|
||||||
|
@ -46,8 +46,6 @@ class WizardHostViewController: UITableViewController, TableModelHost, Wizard {
|
||||||
|
|
||||||
private var createdProfile: HostConnectionProfile?
|
private var createdProfile: HostConnectionProfile?
|
||||||
|
|
||||||
weak var delegate: WizardDelegate?
|
|
||||||
|
|
||||||
// MARK: TableModelHost
|
// MARK: TableModelHost
|
||||||
|
|
||||||
lazy var model: TableModel<SectionType, RowType> = {
|
lazy var model: TableModel<SectionType, RowType> = {
|
||||||
|
@ -150,7 +148,10 @@ class WizardHostViewController: UITableViewController, TableModelHost, Wizard {
|
||||||
}
|
}
|
||||||
|
|
||||||
dismiss(animated: true) {
|
dismiss(animated: true) {
|
||||||
self.delegate?.wizard(didCreate: profile, withCredentials: credentials)
|
NotificationCenter.default.post(name: .WizardDidCreate, object: nil, userInfo: [
|
||||||
|
WizardCreationKey.profile: profile,
|
||||||
|
WizardCreationKey.credentials: credentials
|
||||||
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,13 +25,11 @@
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class WizardProviderViewController: UITableViewController, Wizard {
|
class WizardProviderViewController: UITableViewController {
|
||||||
var availableNames: [Infrastructure.Name] = []
|
var availableNames: [Infrastructure.Name] = []
|
||||||
|
|
||||||
private var createdProfile: ProviderConnectionProfile?
|
private var createdProfile: ProviderConnectionProfile?
|
||||||
|
|
||||||
weak var delegate: WizardDelegate?
|
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
@ -55,7 +53,10 @@ class WizardProviderViewController: UITableViewController, Wizard {
|
||||||
fatalError("No profile created?")
|
fatalError("No profile created?")
|
||||||
}
|
}
|
||||||
dismiss(animated: true) {
|
dismiss(animated: true) {
|
||||||
self.delegate?.wizard(didCreate: profile, withCredentials: credentials)
|
NotificationCenter.default.post(name: .WizardDidCreate, object: nil, userInfo: [
|
||||||
|
WizardCreationKey.profile: profile,
|
||||||
|
WizardCreationKey.credentials: credentials
|
||||||
|
])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,12 @@
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
protocol Wizard: class {
|
extension Notification.Name {
|
||||||
var delegate: WizardDelegate? { get set }
|
static let WizardDidCreate = Notification.Name("WizardDidCreate")
|
||||||
}
|
}
|
||||||
|
|
||||||
protocol WizardDelegate: class {
|
enum WizardCreationKey: String {
|
||||||
func wizard(didCreate profile: ConnectionProfile, withCredentials credentials: Credentials)
|
case profile
|
||||||
|
|
||||||
|
case credentials
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue