From 249ba521a6e7faea9361a8065b123dbbee395aeb Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Mon, 8 Jun 2020 13:20:24 +0200 Subject: [PATCH] fix data update in battery popup --- Modules/Battery/popup.swift | 10 +--------- Modules/Battery/readers.swift | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/Modules/Battery/popup.swift b/Modules/Battery/popup.swift index 3b3ac99f..456861d5 100644 --- a/Modules/Battery/popup.swift +++ b/Modules/Battery/popup.swift @@ -38,8 +38,6 @@ internal class Popup: NSView { private var powerField: NSTextField? = nil private var chargingStateField: NSTextField? = nil - private var initialized: Bool = false - public init() { super.init(frame: NSRect( x: 0, @@ -131,10 +129,6 @@ internal class Popup: NSView { public func usageCallback(_ value: Usage) { DispatchQueue.main.async(execute: { - if !self.window!.isVisible && self.initialized { - return - } - self.dashboardBatteryView?.setValue(abs(value.level)) self.levelField?.stringValue = "\(Int(abs(value.level) * 100)) %" @@ -153,7 +147,7 @@ internal class Popup: NSView { } } - if value.timeToEmpty == -1 || value.timeToEmpty == -1 { + if value.timeToEmpty == -1 || value.timeToCharge == -1 { self.timeField?.stringValue = "Calculating" } @@ -169,8 +163,6 @@ internal class Popup: NSView { self.powerField?.stringValue = value.powerSource == "Battery Power" ? "Not connected" : "\(value.ACwatts) W" self.chargingStateField?.stringValue = value.level > 0 ? "Yes" : "No" - - self.initialized = true }) } } diff --git a/Modules/Battery/readers.swift b/Modules/Battery/readers.swift index 70422f94..6fe75487 100644 --- a/Modules/Battery/readers.swift +++ b/Modules/Battery/readers.swift @@ -60,20 +60,20 @@ internal class UsageReader: Reader { self.usage.state = list[kIOPSBatteryHealthKey] as! String self.usage.isCharged = list[kIOPSIsChargedKey] as? Bool ?? false var cap = Double(list[kIOPSCurrentCapacityKey] as! Int) / 100 - + self.usage.timeToEmpty = Int(list[kIOPSTimeToEmptyKey] as! Int) self.usage.timeToCharge = Int(list[kIOPSTimeToFullChargeKey] as! Int) - + self.usage.cycles = self.getIntValue("CycleCount" as CFString) ?? 0 - + let maxCapacity = self.getIntValue("MaxCapacity" as CFString) ?? 1 let designCapacity = self.getIntValue("DesignCapacity" as CFString) ?? 1 self.usage.health = (100 * maxCapacity) / designCapacity - + self.usage.amperage = self.getIntValue("Amperage" as CFString) ?? 0 self.usage.voltage = self.getVoltage() ?? 0 self.usage.temperature = self.getTemperature() ?? 0 - + var ACwatts: Int = 0 if let ACDetails = IOPSCopyExternalPowerAdapterDetails() { if let ACList = ACDetails.takeUnretainedValue() as? Dictionary { @@ -85,12 +85,12 @@ internal class UsageReader: Reader { } self.usage.ACwatts = ACwatts self.usage.ACstatus = self.getBoolValue("IsCharging" as CFString) ?? false - + if self.usage.powerSource == "Battery Power" { cap = 0 - cap } self.usage.level = cap - + DispatchQueue.main.async(execute: { self.callback(self.usage) }) @@ -104,28 +104,28 @@ internal class UsageReader: Reader { } return nil } - + private func getIntValue(_ identifier: CFString) -> Int? { if let value = IORegistryEntryCreateCFProperty(self.service, identifier, kCFAllocatorDefault, 0) { return value.takeRetainedValue() as? Int } return nil } - + private func getDoubleValue(_ identifier: CFString) -> Double? { if let value = IORegistryEntryCreateCFProperty(self.service, identifier, kCFAllocatorDefault, 0) { return value.takeRetainedValue() as? Double } return nil } - + private func getVoltage() -> Double? { if let value = self.getDoubleValue("Voltage" as CFString) { return value / 1000.0 } return nil } - + private func getTemperature() -> Double? { if let value = IORegistryEntryCreateCFProperty(self.service, "Temperature" as CFString, kCFAllocatorDefault, 0) { return value.takeRetainedValue() as! Double / 100.0