func showTunnelDetailForTunnel(named tunnelName: String, animated: Bool, shouldToggleStatus: Bool) {
let showTunnelDetailBlock: (TunnelsManager) -> Void = { [weak self] tunnelsManager in
+ guard let self = self else { return }
+ guard let tunnelsListVC = self.tunnelsListVC else { return }
if let tunnel = tunnelsManager.tunnel(named: tunnelName) {
- let tunnelDetailVC = TunnelDetailTableViewController(tunnelsManager: tunnelsManager, tunnel: tunnel)
- let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC)
- tunnelDetailNC.restorationIdentifier = "DetailNC"
- if let self = self {
- if animated {
- self.showDetailViewController(tunnelDetailNC, sender: self)
- } else {
- UIView.performWithoutAnimation {
- self.showDetailViewController(tunnelDetailNC, sender: self)
- }
- }
- }
+ tunnelsListVC.showTunnelDetail(for: tunnel, animated: false)
if shouldToggleStatus {
if tunnel.status == .inactive {
tunnelsManager.startActivation(of: tunnel)
}
}
}
+
+ func showTunnelDetail(for tunnel: TunnelContainer, animated: Bool) {
+ guard let tunnelsManager = tunnelsManager else { return }
+ guard let splitViewController = splitViewController else { return }
+
+ if detailDisplayedTunnel != tunnel {
+ let tunnelDetailVC = TunnelDetailTableViewController(tunnelsManager: tunnelsManager,
+ tunnel: tunnel)
+ let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC)
+ tunnelDetailNC.restorationIdentifier = "DetailNC"
+ if animated {
+ splitViewController.showDetailViewController(tunnelDetailNC, sender: self)
+ } else {
+ UIView.performWithoutAnimation {
+ splitViewController.showDetailViewController(tunnelDetailNC, sender: self)
+ }
+ }
+ detailDisplayedTunnel = tunnel
+ }
+ }
}
extension TunnelsListTableViewController: UIDocumentPickerDelegate {
}
guard let tunnelsManager = tunnelsManager else { return }
let tunnel = tunnelsManager.tunnel(at: indexPath.row)
- let tunnelDetailVC = TunnelDetailTableViewController(tunnelsManager: tunnelsManager,
- tunnel: tunnel)
- let tunnelDetailNC = UINavigationController(rootViewController: tunnelDetailVC)
- tunnelDetailNC.restorationIdentifier = "DetailNC"
- showDetailViewController(tunnelDetailNC, sender: self) // Shall get propagated up to the split-vc
- detailDisplayedTunnel = tunnel
+ showTunnelDetail(for: tunnel, animated: true)
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {