diff options
author | 2019-03-10 20:02:19 +0530 | |
---|---|---|
committer | 2019-03-10 20:02:19 +0530 | |
commit | 9250780ffc8f996bad39fa5c1a7d193232bbb01f (patch) | |
tree | 97452025542f1744b1bbb1479fb286c901efb40c /WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift | |
parent | TunnelsManager: Support for removing multiple tunnels at a time (diff) | |
download | wireguard-apple-9250780ffc8f996bad39fa5c1a7d193232bbb01f.tar.xz wireguard-apple-9250780ffc8f996bad39fa5c1a7d193232bbb01f.zip |
macOS: Ability to remove multiple tunnels at a time
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift index 3a29840..7f2dbc8 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelsListTableViewController.swift @@ -4,7 +4,7 @@ import Cocoa protocol TunnelsListTableViewControllerDelegate: class { - func tunnelSelected(tunnel: TunnelContainer) + func tunnelsSelected(tunnelIndices: [Int]) func tunnelsListEmpty() } @@ -18,6 +18,7 @@ class TunnelsListTableViewController: NSViewController { tableView.addTableColumn(NSTableColumn(identifier: NSUserInterfaceItemIdentifier("TunnelsList"))) tableView.headerView = nil tableView.rowSizeStyle = .medium + tableView.allowsMultipleSelection = true return tableView }() @@ -158,18 +159,24 @@ class TunnelsListTableViewController: NSViewController { @objc func handleRemoveTunnelAction() { guard let window = view.window else { return } - let selectedTunnelIndex = tableView.selectedRow - guard selectedTunnelIndex >= 0 && selectedTunnelIndex < tunnelsManager.numberOfTunnels() else { return } - let selectedTunnel = tunnelsManager.tunnel(at: selectedTunnelIndex) + let selectedTunnelIndices = tableView.selectedRowIndexes.sorted() + let selectedTunnels = selectedTunnelIndices.compactMap { tunnelIndex in + tunnelIndex >= 0 && tunnelIndex < tunnelsManager.numberOfTunnels() ? tunnelsManager.tunnel(at: tunnelIndex) : nil + } + guard !selectedTunnels.isEmpty else { return } let alert = NSAlert() - alert.messageText = tr(format: "macDeleteTunnelConfirmationAlertMessage (%@)", selectedTunnel.name) + if selectedTunnels.count == 1 { + alert.messageText = tr(format: "macDeleteTunnelConfirmationAlertMessage (%@)", selectedTunnels.first!.name) + } else { + alert.messageText = tr(format: "macDeleteMultipleTunnelsConfirmationAlertMessage (%d)", selectedTunnels.count) + } 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?.removeButton.isEnabled = false - self?.tunnelsManager.remove(tunnel: selectedTunnel) { [weak self] error in + self?.tunnelsManager.removeMultiple(tunnels: selectedTunnels) { [weak self] error in guard let self = self else { return } defer { self.removeButton.isEnabled = true } if let error = error { @@ -309,9 +316,10 @@ extension TunnelsListTableViewController: NSTableViewDelegate { } func tableViewSelectionDidChange(_ notification: Notification) { - guard tableView.selectedRow >= 0 else { return } - let selectedTunnel = tunnelsManager.tunnel(at: tableView.selectedRow) - delegate?.tunnelSelected(tunnel: selectedTunnel) + let selectedTunnelIndices = tableView.selectedRowIndexes.sorted() + if !selectedTunnelIndices.isEmpty { + delegate?.tunnelsSelected(tunnelIndices: tableView.selectedRowIndexes.sorted()) + } } } |