From 1d921b8928ebe64b53c383e2855333dab28c95a6 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Fri, 14 Jun 2019 17:58:41 +0200 Subject: [PATCH] added available flag to modules; disabled battery module on PC --- Stats/MenuBar.swift | 10 ++++++++-- Stats/Modules/Battery/Battery.swift | 2 ++ Stats/Modules/Battery/BatteryReader.swift | 23 ++--------------------- Stats/Modules/CPU/CPU.swift | 2 ++ Stats/Modules/CPU/CPUReader.swift | 1 + Stats/Modules/Disk/Disk.swift | 2 ++ Stats/Modules/Disk/DiskReader.swift | 1 + Stats/Modules/Memory/Memory.swift | 2 ++ Stats/Modules/Memory/MemoryReader.swift | 1 + Stats/libs/Module.swift | 5 ++++- 10 files changed, 25 insertions(+), 24 deletions(-) diff --git a/Stats/MenuBar.swift b/Stats/MenuBar.swift index a367a5ab..da8bec83 100644 --- a/Stats/MenuBar.swift +++ b/Stats/MenuBar.swift @@ -35,6 +35,10 @@ class MenuBar { module.active.subscribe(observer: self) { (value, _) in self.buildModulesView() } + module.available.subscribe(observer: self) { (value, _) in + self.buildModulesView() + self.menuBarItem.menu = self.buildMenu() + } } } @@ -42,7 +46,9 @@ class MenuBar { let menu = NSMenu() for module in modules.value { - menu.addItem(module.menu()) + if module.available.value { + menu.addItem(module.menu()) + } } menu.addItem(NSMenuItem.separator()) @@ -103,7 +109,7 @@ class MenuBar { WIDTH = 0 for module in modules.value { - if module.active.value { + if module.active.value && module.available.value { module.start() WIDTH = WIDTH + module.view.frame.size.width stack.addView(module.view, in: NSStackView.Gravity.center) diff --git a/Stats/Modules/Battery/Battery.swift b/Stats/Modules/Battery/Battery.swift index d07ca3c0..e5283208 100644 --- a/Stats/Modules/Battery/Battery.swift +++ b/Stats/Modules/Battery/Battery.swift @@ -14,9 +14,11 @@ class Battery: Module { let defaults = UserDefaults.standard var active: Observable + var available: Observable var reader: Reader = BatteryReader() init() { + self.available = Observable(self.reader.available) self.active = Observable(defaults.object(forKey: name) != nil ? defaults.bool(forKey: name) : true) self.view = BatteryView(frame: NSMakeRect(0, 0, MODULE_WIDTH, MODULE_HEIGHT)) } diff --git a/Stats/Modules/Battery/BatteryReader.swift b/Stats/Modules/Battery/BatteryReader.swift index 8e493589..3ba7d013 100644 --- a/Stats/Modules/Battery/BatteryReader.swift +++ b/Stats/Modules/Battery/BatteryReader.swift @@ -11,28 +11,9 @@ import IOKit.ps class BatteryReader: Reader { var usage: Observable! + var available: Bool = false var updateTimer: Timer! - fileprivate static let IOSERVICE_BATTERY = "AppleSmartBattery" - fileprivate var service: io_service_t = 0 - fileprivate enum Key: String { - case ACPowered = "ExternalConnected" - case Amperage = "Amperage" - /// Current charge - case CurrentCapacity = "CurrentCapacity" - case CycleCount = "CycleCount" - /// Originally DesignCapacity == MaxCapacity - case DesignCapacity = "DesignCapacity" - case DesignCycleCount = "DesignCycleCount9C" - case FullyCharged = "FullyCharged" - case IsCharging = "IsCharging" - /// Current max charge (this degrades over time) - case MaxCapacity = "MaxCapacity" - case Temperature = "Temperature" - /// Time remaining to charge/discharge - case TimeRemaining = "TimeRemaining" - } - init() { self.usage = Observable(0) read() @@ -56,10 +37,10 @@ class BatteryReader: Reader { @objc func read() { let psInfo = IOPSCopyPowerSourcesInfo().takeRetainedValue() let psList = IOPSCopyPowerSourcesList(psInfo).takeRetainedValue() as [CFTypeRef] + self.available = psList.count != 0 for ps in psList { if let psDesc = IOPSGetPowerSourceDescription(psInfo, ps).takeUnretainedValue() as? [String: Any] { -// let type = psDesc[kIOPSTypeKey] as? String let isCharging = (psDesc[kIOPSIsChargingKey] as? Bool) var cap: Float = Float(psDesc[kIOPSCurrentCapacityKey] as! Int) / 100 diff --git a/Stats/Modules/CPU/CPU.swift b/Stats/Modules/CPU/CPU.swift index 8bcc2fb2..c8f6fa15 100644 --- a/Stats/Modules/CPU/CPU.swift +++ b/Stats/Modules/CPU/CPU.swift @@ -14,11 +14,13 @@ class CPU: Module { let defaults = UserDefaults.standard var active: Observable + var available: Observable var reader: Reader = CPUReader() @IBOutlet weak var value: NSTextField! init() { + self.available = Observable(true) self.active = Observable(defaults.object(forKey: name) != nil ? defaults.bool(forKey: name) : true) self.view = loadViewFromNib() } diff --git a/Stats/Modules/CPU/CPUReader.swift b/Stats/Modules/CPU/CPUReader.swift index 877231ab..45cf4fb0 100644 --- a/Stats/Modules/CPU/CPUReader.swift +++ b/Stats/Modules/CPU/CPUReader.swift @@ -10,6 +10,7 @@ import Foundation class CPUReader: Reader { var usage: Observable! + var available: Bool = true var cpuInfo: processor_info_array_t! var prevCpuInfo: processor_info_array_t? var numCpuInfo: mach_msg_type_number_t = 0 diff --git a/Stats/Modules/Disk/Disk.swift b/Stats/Modules/Disk/Disk.swift index 8f2d49c4..13b14121 100644 --- a/Stats/Modules/Disk/Disk.swift +++ b/Stats/Modules/Disk/Disk.swift @@ -14,11 +14,13 @@ class Disk: Module { let defaults = UserDefaults.standard var active: Observable + var available: Observable var reader: Reader = DiskReader() @IBOutlet weak var value: NSTextField! init() { + self.available = Observable(true) self.active = Observable(defaults.object(forKey: name) != nil ? defaults.bool(forKey: name) : true) self.view = loadViewFromNib() } diff --git a/Stats/Modules/Disk/DiskReader.swift b/Stats/Modules/Disk/DiskReader.swift index 2fbf0ada..824c0e6b 100644 --- a/Stats/Modules/Disk/DiskReader.swift +++ b/Stats/Modules/Disk/DiskReader.swift @@ -10,6 +10,7 @@ import Foundation class DiskReader: Reader { var usage: Observable! + var available: Bool = true var updateTimer: Timer! init() { diff --git a/Stats/Modules/Memory/Memory.swift b/Stats/Modules/Memory/Memory.swift index 21354ce8..3516c292 100644 --- a/Stats/Modules/Memory/Memory.swift +++ b/Stats/Modules/Memory/Memory.swift @@ -14,11 +14,13 @@ class Memory: Module { let defaults = UserDefaults.standard var active: Observable + var available: Observable var reader: Reader = MemoryReader() @IBOutlet weak var value: NSTextField! init() { + self.available = Observable(true) self.active = Observable(defaults.object(forKey: name) != nil ? defaults.bool(forKey: name) : true) self.view = loadViewFromNib() } diff --git a/Stats/Modules/Memory/MemoryReader.swift b/Stats/Modules/Memory/MemoryReader.swift index 5ba24bfd..14d08c22 100644 --- a/Stats/Modules/Memory/MemoryReader.swift +++ b/Stats/Modules/Memory/MemoryReader.swift @@ -10,6 +10,7 @@ import Foundation class MemoryReader: Reader { var usage: Observable! + var available: Bool = true var updateTimer: Timer! var totalSize: Float diff --git a/Stats/libs/Module.swift b/Stats/libs/Module.swift index 9b646abe..32f1ef65 100644 --- a/Stats/libs/Module.swift +++ b/Stats/libs/Module.swift @@ -11,6 +11,7 @@ import Cocoa protocol Module { var name: String { get } var active: Observable { get } + var available: Observable { get } var reader: Reader { get } var view: NSView { get } @@ -36,7 +37,9 @@ extension Module { protocol Reader { var usage: Observable! { get } + var available: Bool { get } + var updateTimer: Timer! { get set } func start() - func read() func stop() + func read() }