diff options
author | Alessio Nossa <alessio.nossa@gmail.com> | 2022-01-29 17:17:05 +0100 |
---|---|---|
committer | Alessio Nossa <alessio.nossa@gmail.com> | 2022-02-01 20:13:13 +0100 |
commit | ceabb4ea341ef0e792c5d0f06c6128d1e91ad522 (patch) | |
tree | b5c0fe76977a16a209bdb68edcc1bc2fa50b5fae | |
parent | Implemented GetPeers intent (diff) | |
download | wireguard-apple-ceabb4ea341ef0e792c5d0f06c6128d1e91ad522.tar.xz wireguard-apple-ceabb4ea341ef0e792c5d0f06c6128d1e91ad522.zip |
WireguardApp: iOS: Moved tunnelsManager initialization to AppDelegate
Signed-off-by: Alessio Nossa <alessio.nossa@gmail.com>
-rw-r--r-- | Sources/WireGuardApp/UI/iOS/AppDelegate.swift | 23 | ||||
-rw-r--r-- | Sources/WireGuardApp/UI/iOS/ViewController/MainViewController.swift | 33 |
2 files changed, 38 insertions, 18 deletions
diff --git a/Sources/WireGuardApp/UI/iOS/AppDelegate.swift b/Sources/WireGuardApp/UI/iOS/AppDelegate.swift index 4ab3b30..4172b33 100644 --- a/Sources/WireGuardApp/UI/iOS/AppDelegate.swift +++ b/Sources/WireGuardApp/UI/iOS/AppDelegate.swift @@ -11,6 +11,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var mainVC: MainViewController? var isLaunchedForSpecificAction = false + var tunnelsManager: TunnelsManager? + + static let tunnelsManagerReadyNotificationName: Notification.Name = Notification.Name(rawValue: "com.wireguard.ios.tunnelsManagerReadyNotification") + func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Logger.configureGlobal(tagged: "APP", withFilePath: FileManager.logFileURL?.path) @@ -29,6 +33,25 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.mainVC = mainVC + // Create the tunnels manager, and when it's ready, inform tunnelsListVC + TunnelsManager.create { [weak self] result in + guard let self = self else { return } + + switch result { + case .failure(let error): + ErrorPresenter.showErrorAlert(error: error, from: self.mainVC) + case .success(let tunnelsManager): + self.tunnelsManager = tunnelsManager + self.mainVC?.tunnelsListVC?.setTunnelsManager(tunnelsManager: tunnelsManager) + + tunnelsManager.activationDelegate = self.mainVC + + NotificationCenter.default.post(name: AppDelegate.tunnelsManagerReadyNotificationName, + object: self, + userInfo: nil) + } + } + return true } diff --git a/Sources/WireGuardApp/UI/iOS/ViewController/MainViewController.swift b/Sources/WireGuardApp/UI/iOS/ViewController/MainViewController.swift index b780517..6aab559 100644 --- a/Sources/WireGuardApp/UI/iOS/ViewController/MainViewController.swift +++ b/Sources/WireGuardApp/UI/iOS/ViewController/MainViewController.swift @@ -5,7 +5,9 @@ import UIKit class MainViewController: UISplitViewController { - var tunnelsManager: TunnelsManager? + var tunnelsManager: TunnelsManager? { + return (UIApplication.shared.delegate as? AppDelegate)?.tunnelsManager + } var onTunnelsManagerReady: ((TunnelsManager) -> Void)? var tunnelsListVC: TunnelsListTableViewController? @@ -42,29 +44,24 @@ class MainViewController: UISplitViewController { // On iPad, always show both masterVC and detailVC, even in portrait mode, like the Settings app preferredDisplayMode = .allVisible - // Create the tunnels manager, and when it's ready, inform tunnelsListVC - TunnelsManager.create { [weak self] result in - guard let self = self else { return } - - switch result { - case .failure(let error): - ErrorPresenter.showErrorAlert(error: error, from: self) - case .success(let tunnelsManager): - self.tunnelsManager = tunnelsManager - self.tunnelsListVC?.setTunnelsManager(tunnelsManager: tunnelsManager) - - tunnelsManager.activationDelegate = self - - self.onTunnelsManagerReady?(tunnelsManager) - self.onTunnelsManagerReady = nil - } - } + NotificationCenter.default.addObserver(self, selector: #selector(handleTunnelsManagerReady(_:)), + name: AppDelegate.tunnelsManagerReadyNotificationName, object: nil) } func allTunnelNames() -> [String]? { guard let tunnelsManager = self.tunnelsManager else { return nil } return tunnelsManager.mapTunnels { $0.name } } + + @objc + func handleTunnelsManagerReady(_ notification: Notification) { + guard let tunnelsManager = self.tunnelsManager else { return } + + self.onTunnelsManagerReady?(tunnelsManager) + self.onTunnelsManagerReady = nil + + NotificationCenter.default.removeObserver(self, name: AppDelegate.tunnelsManagerReadyNotificationName, object: nil) + } } extension MainViewController: TunnelsManagerActivationDelegate { |