diff --git a/Stats.xcodeproj/project.pbxproj b/Stats.xcodeproj/project.pbxproj index ed7c0185..015f7103 100644 --- a/Stats.xcodeproj/project.pbxproj +++ b/Stats.xcodeproj/project.pbxproj @@ -756,7 +756,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 1.6.1; + MARKETING_VERSION = 1.6.2; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -787,7 +787,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.13; - MARKETING_VERSION = 1.6.1; + MARKETING_VERSION = 1.6.2; PRODUCT_BUNDLE_IDENTIFIER = eu.exelban.Stats; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Stats/Modules/Network/Network.swift b/Stats/Modules/Network/Network.swift index aac2fa51..cac4b3ce 100644 --- a/Stats/Modules/Network/Network.swift +++ b/Stats/Modules/Network/Network.swift @@ -48,7 +48,7 @@ class Network: Module { readers.append(NetworkReader(self.usageUpdater)) readers.append(NetworkInterfaceReader(self.overviewUpdater)) - + self.task = Repeater.init(interval: .seconds(self.updateInterval), observer: { _ in self.readers.forEach { reader in reader.read() diff --git a/Stats/Modules/Network/NetworkInterfaceReader.swift b/Stats/Modules/Network/NetworkInterfaceReader.swift index 5132e9ff..a142d301 100644 --- a/Stats/Modules/Network/NetworkInterfaceReader.swift +++ b/Stats/Modules/Network/NetworkInterfaceReader.swift @@ -63,6 +63,8 @@ class NetworkInterfaceReader: Reader { private var reachability: Reachability? = nil private var forceRead: Bool = false + private var repeatCounter: Int8 = 0 + init(_ updater: @escaping (NetworkInterface) -> Void) { do { self.reachability = try Reachability() @@ -79,6 +81,7 @@ class NetworkInterfaceReader: Reader { if self.reachability != nil { self.reachability!.whenReachable = { reachability in + self.repeatCounter = 0 self.forceRead = true self.read() } @@ -98,24 +101,29 @@ class NetworkInterfaceReader: Reader { public func read() { if (!self.enabled && self.initialized && !self.forceRead) || self.reachability == nil { return } self.initialized = true - + var result = NetworkInterface(active: false) result.force = self.forceRead if self.forceRead { self.forceRead = false } - + if self.reachability!.connection != .unavailable && isConnectedToNetwork() { if self.publicIP == nil { - DispatchQueue.global(qos: .background).async { - self.publicIP = self.getPublicIP() - self.forceRead = true - self.read() - } + DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 3, execute: { + if self.repeatCounter < 5 { + self.publicIP = self.getPublicIP() + self.forceRead = true + self.read() + self.repeatCounter += 1 + } else { + self.publicIP = "Unknown" + } + }) } - + result.active = true - + if self.reachability!.connection == .wifi && CWWiFiClient.shared().interface() != nil { result.networkType = "Wi-Fi" result.wifiName = CWWiFiClient.shared().interface()!.ssid() @@ -131,7 +139,7 @@ class NetworkInterfaceReader: Reader { } else { self.publicIP = nil } - + DispatchQueue.main.async(execute: { self.callback(result) }) @@ -218,7 +226,7 @@ class NetworkInterfaceReader: Reader { } catch let error { print("get public ip \(error)") } - + return address }