From 985322014bc08a2054d8648e0c7a3289ae4e3dbf Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Sat, 17 Sep 2022 19:34:13 +0200 Subject: [PATCH] feat: added connectivity status to the Network popup view (#1082) --- Modules/Net/main.swift | 9 +++++++++ Modules/Net/popup.swift | 23 ++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Modules/Net/main.swift b/Modules/Net/main.swift index b64cf077..66d0c791 100644 --- a/Modules/Net/main.swift +++ b/Modules/Net/main.swift @@ -105,6 +105,7 @@ public class Network: Module { private var usageReader: UsageReader? = nil private var processReader: ProcessReader? = nil + private var connectivityReader: ConnectivityReader? = nil private let ipUpdater = NSBackgroundActivityScheduler(identifier: "eu.exelban.Stats.Network.IP") private let usageReseter = NSBackgroundActivityScheduler(identifier: "eu.exelban.Stats.Network.Usage") @@ -127,6 +128,7 @@ public class Network: Module { self.usageReader = UsageReader() self.processReader = ProcessReader() + self.connectivityReader = ConnectivityReader() self.settingsView.callbackWhenUpdateNumberOfProcesses = { self.popupView.numberOfProcessesUpdated() @@ -148,6 +150,10 @@ public class Network: Module { } } + self.connectivityReader?.callbackHandler = { [unowned self] value in + self.popupView.connectivityCallback(value) + } + self.settingsView.callback = { [unowned self] in self.usageReader?.getDetails() self.usageReader?.read() @@ -162,6 +168,9 @@ public class Network: Module { if let reader = self.processReader { self.addReader(reader) } + if let reader = self.connectivityReader { + self.addReader(reader) + } self.setIPUpdater() self.setUsageReset() diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index a510c561..ee535970 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -35,7 +35,8 @@ internal class Popup: NSStackView, Popup_p { private var macAdressField: ValueField? = nil private var totalUploadField: ValueField? = nil private var totalDownloadField: ValueField? = nil - private var connectionField: ValueField? = nil + private var statusField: ValueField? = nil + private var connectivityField: ValueField? = nil private var publicIPStackView: NSStackView? = nil private var publicIPv4Field: ValueField? = nil @@ -50,6 +51,7 @@ internal class Popup: NSStackView, Popup_p { private var initialized: Bool = false private var processesInitialized: Bool = false + private var connectionInitialized: Bool = false private var chart: NetworkChartView? = nil private var processes: [NetworkProcessView] = [] @@ -186,7 +188,8 @@ internal class Popup: NSStackView, Popup_p { self.totalUploadField = popupWithColorRow(container, color: NSColor.systemRed, n: 5, title: "\(localizedString("Total upload")):", value: "0") self.totalDownloadField = popupWithColorRow(container, color: NSColor.systemBlue, n: 4, title: "\(localizedString("Total download")):", value: "0") - self.connectionField = popupRow(container, n: 0, title: "\(localizedString("Status")):", value: localizedString("Unknown")).1 + self.statusField = popupRow(container, n: 0, title: "\(localizedString("Status")):", value: localizedString("Unknown")).1 + self.connectivityField = popupRow(container, n: 0, title: "\(localizedString("Connectivity")):", value: localizedString("Unknown")).1 self.ssidField = popupRow(container, n: 0, title: "\(localizedString("Network")):", value: localizedString("Unknown")).1 self.standardField = popupRow(container, n: 0, title: "\(localizedString("Standard")):", value: localizedString("Unknown")).1 @@ -355,7 +358,7 @@ internal class Popup: NSStackView, Popup_p { self.localIPField?.stringValue = value.laddr ?? localizedString("Unknown") } - self.connectionField?.stringValue = localizedString(value.status ? "UP" : "DOWN") + self.statusField?.stringValue = localizedString(value.status ? "UP" : "DOWN") self.initialized = true } @@ -369,6 +372,20 @@ internal class Popup: NSStackView, Popup_p { }) } + public func connectivityCallback(_ value: Bool?) { + DispatchQueue.main.async(execute: { + if (self.window?.isVisible ?? false) || !self.connectionInitialized { + var text = "Unknown" + if let v = value, v == true { + text = v ? "UP" : "DOWN" + } + + self.connectivityField?.stringValue = localizedString(text) + self.connectionInitialized = true + } + }) + } + public func processCallback(_ list: [Network_Process]) { DispatchQueue.main.async(execute: { if !(self.window?.isVisible ?? false) && self.processesInitialized {