From efb64b195966d876e9b9b2f2d4bba7872e5b02de Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Fri, 4 Jan 2019 20:09:28 +0530 Subject: macOS: Manage tunnels: Remove tunnel Signed-off-by: Roopesh Chander --- WireGuard/WireGuard/Base.lproj/Localizable.strings | 7 +++- .../TunnelsListTableViewController.swift | 37 ++++++++++++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/WireGuard/WireGuard/Base.lproj/Localizable.strings b/WireGuard/WireGuard/Base.lproj/Localizable.strings index f5001ba..dd1f118 100644 --- a/WireGuard/WireGuard/Base.lproj/Localizable.strings +++ b/WireGuard/WireGuard/Base.lproj/Localizable.strings @@ -233,10 +233,15 @@ "macMenuExportLog" = "Export log to file..."; "macMenuExportTunnels" = "Export tunnels to zip..."; -// Mac window title +// Mac manage tunnels window "macWindowTitleManageTunnels" = "Manage WireGuard Tunnels"; +"macDeleteTunnelConfirmationAlertMessage (%@)" = "Are you sure you want to delete tunnel \"%@\"?"; +"macDeleteTunnelConfirmationAlertInfo" = "You can't undo this action"; +"macDeleteTunnelConfirmationAlertButtonTitleDelete" = "Delete"; +"macDeleteTunnelConfirmationAlertButtonTitleCancel" = "Cancel"; + // Mac detail view fields "macDetailFieldKey (%@)" = "%@:"; diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift index c7d691f..643529c 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift @@ -61,7 +61,7 @@ class TunnelsListTableViewController: NSViewController { override func loadView() { tableView.dataSource = self tableView.delegate = self - selectFirstTunnel() + selectTunnel(at: 0) let scrollView = NSScrollView() scrollView.hasVerticalScroller = true @@ -140,7 +140,30 @@ class TunnelsListTableViewController: NSViewController { } @objc func removeTunnelClicked() { - print("removeTunnelClicked") + guard let window = view.window else { return } + let selectedTunnelIndex = tableView.selectedRow + let selectedTunnel = tunnelsManager.tunnel(at: selectedTunnelIndex) + let alert = NSAlert() + alert.messageText = tr(format: "macDeleteTunnelConfirmationAlertMessage (%@)", selectedTunnel.name) + alert.informativeText = tr("macDeleteTunnelConfirmationAlertInfo") + alert.addButton(withTitle: tr("macDeleteTunnelConfirmationAlertButtonTitleDelete")) + alert.addButton(withTitle: tr("macDeleteTunnelConfirmationAlertButtonTitleCancel")) + alert.beginSheetModal(for: window) { [weak self] response in + guard response == .alertFirstButtonReturn else { return } + self?.buttonBar.setEnabled(false, forSegment: 1) + self?.tunnelsManager.remove(tunnel: selectedTunnel) { [weak self] error in + guard let self = self else { return } + self.buttonBar.setEnabled(true, forSegment: 1) + if let error = error { + ErrorPresenter.showErrorAlert(error: error, from: self) + return + } + let tunnelIndex = min(selectedTunnelIndex, self.tunnelsManager.numberOfTunnels() - 1) + if tunnelIndex > 0 { + self.selectTunnel(at: tunnelIndex) + } + } + } } @objc func exportLogClicked() { @@ -199,10 +222,12 @@ class TunnelsListTableViewController: NSViewController { } @discardableResult - private func selectFirstTunnel() -> Bool { - guard tunnelsManager.numberOfTunnels() > 0 else { return false } - tableView.selectRowIndexes(IndexSet(integer: 0), byExtendingSelection: false) - return true + private func selectTunnel(at index: Int) -> Bool { + if index < tunnelsManager.numberOfTunnels() { + tableView.selectRowIndexes(IndexSet(integer: index), byExtendingSelection: false) + return true + } + return false } } -- cgit v1.2.3-59-g8ed1b