]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Tunnel detail: Refactor calculation of tableViewModelRows
authorRoopesh Chander <roop@roopc.net>
Mon, 4 Feb 2019 10:57:11 +0000 (16:27 +0530)
committerRoopesh Chander <roop@roopc.net>
Tue, 5 Feb 2019 07:06:34 +0000 (12:36 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift

index 9e800092e3111c34a3ef4c864c6d124e92dd163d..e481a118b686ea9e4514878eb77692954e842066 100644 (file)
@@ -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() {