From c51303c2f26a8c92dd363abea0cdd47474787fda Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Wed, 1 Jan 2025 15:20:24 +0100 Subject: [PATCH] feat: added additional wifi events listener that will read the connection details if something was changed (#2292) --- Modules/Net/readers.swift | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Modules/Net/readers.swift b/Modules/Net/readers.swift index 0745638b..19d22267 100644 --- a/Modules/Net/readers.swift +++ b/Modules/Net/readers.swift @@ -103,7 +103,7 @@ extension CWChannel { } } -internal class UsageReader: Reader { +internal class UsageReader: Reader, CWEventDelegate { private var reachability: Reachability = Reachability(start: true) private let variablesQueue = DispatchQueue(label: "eu.exelban.NetworkUsageReader") private var _usage: Network_Usage = Network_Usage() @@ -141,6 +141,8 @@ internal class UsageReader: Reader { get { Store.shared.bool(key: "Network_VPNMode", defaultValue: false) } } + private let wifiClient = CWWiFiClient.shared() + public override func setup() { self.reachability.reachable = { if self.active { @@ -171,10 +173,14 @@ internal class UsageReader: Reader { self.usage = usage self.usage.bandwidth = Bandwidth() } + + self.wifiClient.delegate = self + self.startListeningForWifiEvents() } public override func terminate() { self.reachability.stop() + self.stopListeningForWifiEvents() } public override func read() { @@ -461,6 +467,26 @@ internal class UsageReader: Reader { self.usage.total = Bandwidth() self.save(self.usage) } + + private func startListeningForWifiEvents() { + do { + try self.wifiClient.startMonitoringEvent(with: .ssidDidChange) + } catch let err as NSError { + error("failed to start monitoring Wi-Fi events: \(err.localizedDescription)") + } + } + + private func stopListeningForWifiEvents() { + do { + try self.wifiClient.stopMonitoringEvent(with: .ssidDidChange) + } catch let err as NSError { + error("failed to stop monitoring Wi-Fi events: \(err.localizedDescription)") + } + } + + func ssidDidChangeForWiFiInterface(withName interfaceName: String) { + self.getWiFiDetails() + } } public class ProcessReader: Reader<[Network_Process]> {