WireguardApp: iOS: Moved tunnelsManager initialization to AppDelegate
Signed-off-by: Alessio Nossa <alessio.nossa@gmail.com>
This commit is contained in:
@@ -11,6 +11,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
var mainVC: MainViewController?
|
var mainVC: MainViewController?
|
||||||
var isLaunchedForSpecificAction = false
|
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 {
|
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
Logger.configureGlobal(tagged: "APP", withFilePath: FileManager.logFileURL?.path)
|
Logger.configureGlobal(tagged: "APP", withFilePath: FileManager.logFileURL?.path)
|
||||||
|
|
||||||
@@ -29,6 +33,25 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
|
|
||||||
self.mainVC = mainVC
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import UIKit
|
|||||||
|
|
||||||
class MainViewController: UISplitViewController {
|
class MainViewController: UISplitViewController {
|
||||||
|
|
||||||
var tunnelsManager: TunnelsManager?
|
var tunnelsManager: TunnelsManager? {
|
||||||
|
return (UIApplication.shared.delegate as? AppDelegate)?.tunnelsManager
|
||||||
|
}
|
||||||
var onTunnelsManagerReady: ((TunnelsManager) -> Void)?
|
var onTunnelsManagerReady: ((TunnelsManager) -> Void)?
|
||||||
var tunnelsListVC: TunnelsListTableViewController?
|
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
|
// On iPad, always show both masterVC and detailVC, even in portrait mode, like the Settings app
|
||||||
preferredDisplayMode = .allVisible
|
preferredDisplayMode = .allVisible
|
||||||
|
|
||||||
// Create the tunnels manager, and when it's ready, inform tunnelsListVC
|
NotificationCenter.default.addObserver(self, selector: #selector(handleTunnelsManagerReady(_:)),
|
||||||
TunnelsManager.create { [weak self] result in
|
name: AppDelegate.tunnelsManagerReadyNotificationName, object: nil)
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func allTunnelNames() -> [String]? {
|
func allTunnelNames() -> [String]? {
|
||||||
guard let tunnelsManager = self.tunnelsManager else { return nil }
|
guard let tunnelsManager = self.tunnelsManager else { return nil }
|
||||||
return tunnelsManager.mapTunnels { $0.name }
|
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 {
|
extension MainViewController: TunnelsManagerActivationDelegate {
|
||||||
|
|||||||
Reference in New Issue
Block a user