From: Roopesh Chander Date: Mon, 4 Feb 2019 10:57:11 +0000 (+0530) Subject: macOS: Tunnel detail: Refactor calculation of tableViewModelRows X-Git-Tag: 0.0.20190207-1~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=657ec34d19274af9ab1fdc1c41e9192a39f5fa14;p=thirdparty%2Fwireguard-apple.git macOS: Tunnel detail: Refactor calculation of tableViewModelRows Signed-off-by: Roopesh Chander --- diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift index 9e80009..e481a11 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift @@ -78,12 +78,15 @@ class TunnelDetailTableViewController: NSViewController { let tunnelsManager: TunnelsManager let tunnel: TunnelContainer + var tunnelViewModel: TunnelViewModel { - didSet { - updateTableViewModelRows() - } + didSet { updateTableViewModelRowsBySection() } + } + private var tableViewModelRowsBySection = [[(isVisible: Bool, modelRow: TableViewModelRow)]]() { + didSet { updateTableViewModelRows() } } private var tableViewModelRows = [TableViewModelRow]() + private var statusObservationToken: AnyObject? private var tunnelEditVC: TunnelEditViewController? private var reloadRuntimeConfigurationTimer: Timer? @@ -160,19 +163,34 @@ class TunnelDetailTableViewController: NSViewController { view = containerView } - func updateTableViewModelRows() { - tableViewModelRows = [] - for field in interfaceFields where !tunnelViewModel.interfaceData[field].isEmpty { - tableViewModelRows.append(.interfaceFieldRow(field)) + func updateTableViewModelRowsBySection() { + var modelRowsBySection = [[(isVisible: Bool, modelRow: TableViewModelRow)]]() + + var interfaceSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + for field in interfaceFields { + interfaceSection.append((isVisible: !tunnelViewModel.interfaceData[field].isEmpty, modelRow: .interfaceFieldRow(field))) } + interfaceSection.append((isVisible: true, modelRow: .spacerRow)) + modelRowsBySection.append(interfaceSection) + for peerData in tunnelViewModel.peersData { - tableViewModelRows.append(.spacerRow) - for field in peerFields where !peerData[field].isEmpty { - tableViewModelRows.append(.peerFieldRow(peer: peerData, field: field)) + var peerSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + for field in peerFields { + peerSection.append((isVisible: !peerData[field].isEmpty, modelRow: .peerFieldRow(peer: peerData, field: field))) } + peerSection.append((isVisible: true, modelRow: .spacerRow)) + modelRowsBySection.append(peerSection) } - tableViewModelRows.append(.spacerRow) - tableViewModelRows.append(.onDemandRow) + + var onDemandSection = [(isVisible: Bool, modelRow: TableViewModelRow)]() + onDemandSection.append((isVisible: true, modelRow: .onDemandRow)) + modelRowsBySection.append(onDemandSection) + + tableViewModelRowsBySection = modelRowsBySection + } + + func updateTableViewModelRows() { + tableViewModelRows = tableViewModelRowsBySection.flatMap { $0.filter { $0.isVisible }.map { $0.modelRow } } } func updateStatus() {