]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Manage tunnels: Remove tunnel
authorRoopesh Chander <roop@roopc.net>
Fri, 4 Jan 2019 14:39:28 +0000 (20:09 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 14 Jan 2019 09:22:32 +0000 (14:52 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/Base.lproj/Localizable.strings
WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift

index f5001ba23bb28a879b5f8de88bb2b37bf87be94a..dd1f118d36be661e978fbda01481047df06f7154 100644 (file)
 "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 (%@)" = "%@:";
index c7d691f024364921c9d3535989e1fee72c446f8a..643529c543371a19ead986dafda6ba0d1604572d 100644 (file)
@@ -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
     }
 }