diff options
author | Roopesh Chander <roop@roopc.net> | 2018-10-25 11:10:18 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-10-27 15:13:02 +0530 |
commit | 05b9d6972b99750882371dcb04dabe38486b6f79 (patch) | |
tree | 138f31a74240bcb2a0b8019c77197c6c920ff02b /WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift | |
parent | Tunnel editing: Separate init for creation and modification (diff) | |
download | wireguard-apple-05b9d6972b99750882371dcb04dabe38486b6f79.tar.xz wireguard-apple-05b9d6972b99750882371dcb04dabe38486b6f79.zip |
Import: Support for opening a .conf file in the app
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift index abbf0ac..0500f18 100644 --- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift @@ -6,6 +6,7 @@ import UIKit class TunnelsListTableViewController: UITableViewController { var tunnelsManager: TunnelsManager? = nil + var onTunnelsManagerReady: ((TunnelsManager) -> Void)? = nil init() { super.init(style: .plain) @@ -28,6 +29,8 @@ class TunnelsListTableViewController: UITableViewController { if let s = self { tunnelsManager.delegate = s s.tunnelsManager = tunnelsManager + s.onTunnelsManagerReady?(tunnelsManager) + s.onTunnelsManagerReady = nil s.tableView.reloadData() } } @@ -40,10 +43,7 @@ class TunnelsListTableViewController: UITableViewController { alert.addAction( UIAlertAction(title: "Create from scratch", style: .default) { [weak self] (action) in if let s = self, let tunnelsManager = s.tunnelsManager { - let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager) - editVC.delegate = s - let editNC = UINavigationController(rootViewController: editVC) - s.present(editNC, animated: true) + s.presentViewControllerForTunnelCreation(tunnelsManager: tunnelsManager, tunnelConfiguration: nil) } } ) @@ -54,6 +54,41 @@ class TunnelsListTableViewController: UITableViewController { alert.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem self.present(alert, animated: true, completion: nil) } + + func openForEditing(configFileURL: URL) { + let tunnelConfiguration: TunnelConfiguration? + let name = configFileURL.deletingPathExtension().lastPathComponent + do { + let fileContents = try String(contentsOf: configFileURL) + try tunnelConfiguration = WgQuickConfigFileParser.parse(fileContents) + } catch { + showErrorAlert(title: "Could not import config", message: "There was an error importing the config file") + return + } + tunnelConfiguration?.interface.name = name + if let tunnelsManager = tunnelsManager { + presentViewControllerForTunnelCreation(tunnelsManager: tunnelsManager, tunnelConfiguration: tunnelConfiguration) + } else { + onTunnelsManagerReady = { [weak self] tunnelsManager in + self?.presentViewControllerForTunnelCreation(tunnelsManager: tunnelsManager, tunnelConfiguration: tunnelConfiguration) + } + } + } + + func presentViewControllerForTunnelCreation(tunnelsManager: TunnelsManager, tunnelConfiguration: TunnelConfiguration?) { + let editVC = TunnelEditTableViewController(tunnelsManager: tunnelsManager, tunnelConfiguration: tunnelConfiguration) + editVC.delegate = self + let editNC = UINavigationController(rootViewController: editVC) + self.present(editNC, animated: true) + } + + func showErrorAlert(title: String, message: String) { + let okAction = UIAlertAction(title: "Ok", style: .default) + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + alert.addAction(okAction) + + self.present(alert, animated: true, completion: nil) + } } // MARK: TunnelEditTableViewControllerDelegate |