From dca3c03acd4050d4ee354b81741fab275c3083dc Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Mon, 18 Dec 2023 16:44:06 +0100 Subject: [PATCH] feat: added wifi network name from `networksetup` (#1723) --- Modules/Net/popup.swift | 13 +++++++---- Modules/Net/readers.swift | 48 ++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Modules/Net/popup.swift b/Modules/Net/popup.swift index d84d176a..cfc8d0e5 100644 --- a/Modules/Net/popup.swift +++ b/Modules/Net/popup.swift @@ -45,6 +45,7 @@ internal class Popup: PopupWrapper { private var publicIPv4Field: ValueField? = nil private var publicIPv6Field: ValueField? = nil + private var ssidField: ValueField? = nil private var standardField: ValueField? = nil private var channelField: ValueField? = nil @@ -245,6 +246,7 @@ internal class Popup: PopupWrapper { self.latencyField = popupRow(container, n: 0, title: "\(localizedString("Latency")):", value: "0 ms").1 self.interfaceField = popupRow(container, n: 0, title: "\(localizedString("Interface")):", 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 self.channelField = popupRow(container, n: 0, title: "\(localizedString("Channel")):", value: localizedString("Unknown")).1 @@ -371,11 +373,7 @@ internal class Popup: PopupWrapper { } if let interface = value.interface { - var details = interface.BSDName - if value.connectionType == .wifi, let v = value.wifiDetails.RSSI { - details += ", \(v)" - } - self.interfaceField?.stringValue = "\(interface.displayName) (\(details))" + self.interfaceField?.stringValue = "\(interface.displayName) (\(interface.BSDName))" self.macAddressField?.stringValue = interface.address } else { self.interfaceField?.stringValue = localizedString("Unknown") @@ -383,6 +381,10 @@ internal class Popup: PopupWrapper { } if value.connectionType == .wifi { + self.ssidField?.stringValue = value.wifiDetails.ssid ?? localizedString("Unknown") + if let v = value.wifiDetails.RSSI { + self.ssidField?.stringValue += " (\(v))" + } var rssi = localizedString("Unknown") if let v = value.wifiDetails.RSSI { rssi = "\(v) dBm" @@ -404,6 +406,7 @@ internal class Popup: PopupWrapper { let width = value.wifiDetails.channelWidth ?? localizedString("Unknown") self.channelField?.toolTip = "RSSI: \(rssi)\nNoise: \(noise)\nChannel number: \(number)\nChannel band: \(band)\nChannel width: \(width)\nTransmit rate: \(txRate)" } else { + self.ssidField?.stringValue = localizedString("Unavailable") self.standardField?.stringValue = localizedString("Unavailable") self.channelField?.stringValue = localizedString("Unavailable") } diff --git a/Modules/Net/readers.swift b/Modules/Net/readers.swift index c59b2e9d..52fc5ee4 100644 --- a/Modules/Net/readers.swift +++ b/Modules/Net/readers.swift @@ -328,25 +328,37 @@ internal class UsageReader: Reader { guard self.usage.interface != nil else { return } - if let interface = CWWiFiClient.shared().interface(withName: self.interfaceID), self.usage.connectionType == .wifi { - self.usage.wifiDetails.ssid = interface.ssid() - self.usage.wifiDetails.bssid = interface.bssid() - self.usage.wifiDetails.countryCode = interface.countryCode() - - self.usage.wifiDetails.RSSI = interface.rssiValue() - self.usage.wifiDetails.noise = interface.noiseMeasurement() - self.usage.wifiDetails.transmitRate = interface.transmitRate() - - self.usage.wifiDetails.standard = interface.activePHYMode().description - self.usage.wifiDetails.mode = interface.interfaceMode().description - self.usage.wifiDetails.security = interface.security().description - - if let ch = interface.wlanChannel() { - self.usage.wifiDetails.channel = ch.description + if self.usage.connectionType == .wifi { + if let interface = CWWiFiClient.shared().interface(withName: self.interfaceID) { + self.usage.wifiDetails.ssid = interface.ssid() + self.usage.wifiDetails.bssid = interface.bssid() + self.usage.wifiDetails.countryCode = interface.countryCode() - self.usage.wifiDetails.channelBand = ch.channelBand.description - self.usage.wifiDetails.channelWidth = ch.channelWidth.description - self.usage.wifiDetails.channelNumber = ch.channelNumber.description + self.usage.wifiDetails.RSSI = interface.rssiValue() + self.usage.wifiDetails.noise = interface.noiseMeasurement() + self.usage.wifiDetails.transmitRate = interface.transmitRate() + + self.usage.wifiDetails.standard = interface.activePHYMode().description + self.usage.wifiDetails.mode = interface.interfaceMode().description + self.usage.wifiDetails.security = interface.security().description + + if let ch = interface.wlanChannel() { + self.usage.wifiDetails.channel = ch.description + + self.usage.wifiDetails.channelBand = ch.channelBand.description + self.usage.wifiDetails.channelWidth = ch.channelWidth.description + self.usage.wifiDetails.channelNumber = ch.channelNumber.description + } + } + + if self.usage.wifiDetails.ssid == nil || self.usage.wifiDetails.ssid == "" { + let networksetupResponse = syncShell("networksetup -getairportnetwork \(self.interfaceID)") + if networksetupResponse.split(separator: "\n").count == 1 { + let arr = networksetupResponse.split(separator: ":") + if let ssid = arr.last { + self.usage.wifiDetails.ssid = ssid.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + } + } } } }