added available flag to modules; disabled battery module on PC

This commit is contained in:
Serhiy Mytrovtsiy
2019-06-14 17:58:41 +02:00
parent ca5578970f
commit 1d921b8928
10 changed files with 25 additions and 24 deletions

View File

@@ -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)

View File

@@ -14,9 +14,11 @@ class Battery: Module {
let defaults = UserDefaults.standard
var active: Observable<Bool>
var available: Observable<Bool>
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))
}

View File

@@ -11,28 +11,9 @@ import IOKit.ps
class BatteryReader: Reader {
var usage: Observable<Float>!
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

View File

@@ -14,11 +14,13 @@ class CPU: Module {
let defaults = UserDefaults.standard
var active: Observable<Bool>
var available: Observable<Bool>
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()
}

View File

@@ -10,6 +10,7 @@ import Foundation
class CPUReader: Reader {
var usage: Observable<Float>!
var available: Bool = true
var cpuInfo: processor_info_array_t!
var prevCpuInfo: processor_info_array_t?
var numCpuInfo: mach_msg_type_number_t = 0

View File

@@ -14,11 +14,13 @@ class Disk: Module {
let defaults = UserDefaults.standard
var active: Observable<Bool>
var available: Observable<Bool>
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()
}

View File

@@ -10,6 +10,7 @@ import Foundation
class DiskReader: Reader {
var usage: Observable<Float>!
var available: Bool = true
var updateTimer: Timer!
init() {

View File

@@ -14,11 +14,13 @@ class Memory: Module {
let defaults = UserDefaults.standard
var active: Observable<Bool>
var available: Observable<Bool>
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()
}

View File

@@ -10,6 +10,7 @@ import Foundation
class MemoryReader: Reader {
var usage: Observable<Float>!
var available: Bool = true
var updateTimer: Timer!
var totalSize: Float

View File

@@ -11,6 +11,7 @@ import Cocoa
protocol Module {
var name: String { get }
var active: Observable<Bool> { get }
var available: Observable<Bool> { get }
var reader: Reader { get }
var view: NSView { get }
@@ -36,7 +37,9 @@ extension Module {
protocol Reader {
var usage: Observable<Float>! { get }
var available: Bool { get }
var updateTimer: Timer! { get set }
func start()
func read()
func stop()
func read()
}