mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
feat: added an option to show unknown sensors
This commit is contained in:
@@ -1239,3 +1239,15 @@ public class AppIcon: NSView {
|
||||
NSBezierPath(rect: rect).fill()
|
||||
}
|
||||
}
|
||||
|
||||
public func controlState(_ sender: NSControl) -> Bool {
|
||||
var state: NSControl.StateValue
|
||||
|
||||
if #available(OSX 10.15, *) {
|
||||
state = sender is NSSwitch ? (sender as! NSSwitch).state : .off
|
||||
} else {
|
||||
state = sender is NSButton ? (sender as! NSButton).state : .off
|
||||
}
|
||||
|
||||
return state == .on
|
||||
}
|
||||
|
||||
@@ -40,6 +40,11 @@ public class Sensors: Module {
|
||||
self.popupView.setup(self.sensorsReader.list)
|
||||
self.settingsView.setList(list: self.sensorsReader.list)
|
||||
}
|
||||
self.settingsView.unknownCallback = { [unowned self] in
|
||||
self.sensorsReader.unknownCallback()
|
||||
self.popupView.setup(self.sensorsReader.list)
|
||||
self.settingsView.setList(list: self.sensorsReader.list)
|
||||
}
|
||||
|
||||
self.sensorsReader.callbackHandler = { [unowned self] value in
|
||||
self.usageCallback(value)
|
||||
|
||||
@@ -15,20 +15,35 @@ import Kit
|
||||
internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
static let HIDtypes: [SensorType] = [.temperature, .voltage]
|
||||
|
||||
internal var list: [Sensor_p] = []
|
||||
private let listQueue = DispatchQueue(label: "listQueue")
|
||||
internal var listData: [Sensor_p] = []
|
||||
internal var list: [Sensor_p] {
|
||||
get {
|
||||
self.listQueue.sync{self.listData}
|
||||
}
|
||||
set(newValue) {
|
||||
self.listQueue.sync {
|
||||
self.listData = newValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var lastRead: Date = Date()
|
||||
private let firstRead: Date = Date()
|
||||
|
||||
private var HIDState: Bool {
|
||||
get {
|
||||
return Store.shared.bool(key: "Sensors_hid", defaultValue: false)
|
||||
}
|
||||
return Store.shared.bool(key: "Sensors_hid", defaultValue: false)
|
||||
}
|
||||
private var unknownSensorsState: Bool {
|
||||
return Store.shared.bool(key: "Sensors_unknown", defaultValue: false)
|
||||
}
|
||||
|
||||
init() {
|
||||
super.init()
|
||||
|
||||
self.list = self.sensors()
|
||||
}
|
||||
|
||||
private func sensors() -> [Sensor_p] {
|
||||
var available: [String] = SMC.shared.getAllKeys()
|
||||
var list: [Sensor] = []
|
||||
var sensorsList = SensorsList
|
||||
@@ -54,21 +69,36 @@ internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
available.remove(at: idx)
|
||||
}
|
||||
}
|
||||
|
||||
sensorsList.filter{ $0.key.contains("%") }.forEach { (s: Sensor) in
|
||||
var index = 1
|
||||
for i in 0..<10 {
|
||||
let key = s.key.replacingOccurrences(of: "%", with: "\(i)")
|
||||
if available.firstIndex(where: { $0 == key }) != nil {
|
||||
if let idx = available.firstIndex(where: { $0 == key }) {
|
||||
var sensor = s.copy()
|
||||
sensor.key = key
|
||||
sensor.name = s.name.replacingOccurrences(of: "%", with: "\(index)")
|
||||
|
||||
list.append(sensor)
|
||||
available.remove(at: idx)
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.unknownSensorsState {
|
||||
available.forEach { (key: String) in
|
||||
var type: SensorType? = nil
|
||||
switch key.prefix(1) {
|
||||
case "T": type = .temperature
|
||||
case "V": type = .voltage
|
||||
case "P": type = .power
|
||||
case "I": type = .current
|
||||
default: type = nil
|
||||
}
|
||||
if let t = type {
|
||||
list.append(Sensor(key: key, name: key, group: .unknown, type: t, platforms: []))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for sensor in list {
|
||||
if let newValue = SMC.shared.getValue(sensor.key) {
|
||||
@@ -78,7 +108,8 @@ internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
}
|
||||
}
|
||||
|
||||
self.list += list.filter({ (s: Sensor) -> Bool in
|
||||
var results: [Sensor_p] = []
|
||||
results += list.filter({ (s: Sensor) -> Bool in
|
||||
if s.type == .temperature && (s.value == 0 || s.value > 110) {
|
||||
return false
|
||||
} else if s.type == .current && s.value > 100 {
|
||||
@@ -89,11 +120,12 @@ internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
|
||||
#if arch(arm64)
|
||||
if self.HIDState {
|
||||
self.list += self.initHIDSensors()
|
||||
results += self.initHIDSensors()
|
||||
}
|
||||
#endif
|
||||
results += self.initCalculatedSensors()
|
||||
|
||||
self.list += self.initCalculatedSensors()
|
||||
return results
|
||||
}
|
||||
|
||||
public override func read() {
|
||||
@@ -238,6 +270,10 @@ internal class SensorsReader: Reader<[Sensor_p]> {
|
||||
}
|
||||
}).sorted { $0.key.lowercased() < $1.key.lowercased() }
|
||||
}
|
||||
|
||||
public func unknownCallback() {
|
||||
self.list = self.sensors()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Fans
|
||||
|
||||
@@ -17,6 +17,7 @@ internal class Settings: NSStackView, Settings_v {
|
||||
private var hidState: Bool
|
||||
private var fanSpeedState: Bool = false
|
||||
private var fansSyncState: Bool = false
|
||||
private var unknownSensorsState: Bool = false
|
||||
|
||||
private let title: String
|
||||
private var button: NSPopUpButton?
|
||||
@@ -24,6 +25,7 @@ internal class Settings: NSStackView, Settings_v {
|
||||
private var widgets: [widget_t] = []
|
||||
public var callback: (() -> Void) = {}
|
||||
public var HIDcallback: (() -> Void) = {}
|
||||
public var unknownCallback: (() -> Void) = {}
|
||||
public var setInterval: ((_ value: Int) -> Void) = {_ in }
|
||||
|
||||
public init(_ title: String, list: [Sensor_p]) {
|
||||
@@ -49,6 +51,7 @@ internal class Settings: NSStackView, Settings_v {
|
||||
self.hidState = Store.shared.bool(key: "\(self.title)_hid", defaultValue: self.hidState)
|
||||
self.fanSpeedState = Store.shared.bool(key: "\(self.title)_speed", defaultValue: self.fanSpeedState)
|
||||
self.fansSyncState = Store.shared.bool(key: "\(self.title)_fansSync", defaultValue: self.fansSyncState)
|
||||
self.unknownSensorsState = Store.shared.bool(key: "\(self.title)_unknown", defaultValue: self.unknownSensorsState)
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
@@ -88,6 +91,12 @@ internal class Settings: NSStackView, Settings_v {
|
||||
))
|
||||
}
|
||||
|
||||
self.addArrangedSubview(toggleSettingRow(
|
||||
title: localizedString("Show unknown sensors"),
|
||||
action: #selector(toggleuUnknownSensors),
|
||||
state: self.unknownSensorsState
|
||||
))
|
||||
|
||||
var types: [SensorType] = []
|
||||
self.list.forEach { (s: Sensor_p) in
|
||||
if !types.contains(s.type) {
|
||||
@@ -154,15 +163,7 @@ internal class Settings: NSStackView, Settings_v {
|
||||
|
||||
@objc private func handleSelection(_ sender: NSControl) {
|
||||
guard let id = sender.identifier else { return }
|
||||
|
||||
var state: NSControl.StateValue? = nil
|
||||
if #available(OSX 10.15, *) {
|
||||
state = sender is NSSwitch ? (sender as! NSSwitch).state: nil
|
||||
} else {
|
||||
state = sender is NSButton ? (sender as! NSButton).state: nil
|
||||
}
|
||||
|
||||
Store.shared.set(key: "sensor_\(id.rawValue)", value: state! == NSControl.StateValue.on)
|
||||
Store.shared.set(key: "sensor_\(id.rawValue)", value: controlState(sender))
|
||||
self.callback()
|
||||
}
|
||||
|
||||
@@ -175,40 +176,25 @@ internal class Settings: NSStackView, Settings_v {
|
||||
}
|
||||
|
||||
@objc private func toggleSpeedState(_ sender: NSControl) {
|
||||
var state: NSControl.StateValue? = nil
|
||||
if #available(OSX 10.15, *) {
|
||||
state = sender is NSSwitch ? (sender as! NSSwitch).state: nil
|
||||
} else {
|
||||
state = sender is NSButton ? (sender as! NSButton).state: nil
|
||||
}
|
||||
|
||||
self.fanSpeedState = state! == .on ? true : false
|
||||
self.fanSpeedState = controlState(sender)
|
||||
Store.shared.set(key: "\(self.title)_speed", value: self.fanSpeedState)
|
||||
self.callback()
|
||||
}
|
||||
|
||||
@objc func toggleHID(_ sender: NSControl) {
|
||||
var state: NSControl.StateValue? = nil
|
||||
if #available(OSX 10.15, *) {
|
||||
state = sender is NSSwitch ? (sender as! NSSwitch).state: nil
|
||||
} else {
|
||||
state = sender is NSButton ? (sender as! NSButton).state: nil
|
||||
}
|
||||
|
||||
self.hidState = state! == .on ? true : false
|
||||
self.hidState = controlState(sender)
|
||||
Store.shared.set(key: "\(self.title)_hid", value: self.hidState)
|
||||
self.HIDcallback()
|
||||
}
|
||||
|
||||
@objc func toggleFansSync(_ sender: NSControl) {
|
||||
var state: NSControl.StateValue? = nil
|
||||
if #available(OSX 10.15, *) {
|
||||
state = sender is NSSwitch ? (sender as! NSSwitch).state: nil
|
||||
} else {
|
||||
state = sender is NSButton ? (sender as! NSButton).state: nil
|
||||
}
|
||||
|
||||
self.fansSyncState = state! == .on ? true : false
|
||||
self.fansSyncState = controlState(sender)
|
||||
Store.shared.set(key: "\(self.title)_fansSync", value: self.fansSyncState)
|
||||
}
|
||||
|
||||
@objc func toggleuUnknownSensors(_ sender: NSControl) {
|
||||
self.unknownSensorsState = controlState(sender)
|
||||
Store.shared.set(key: "\(self.title)_unknown", value: self.unknownSensorsState)
|
||||
self.unknownCallback()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ internal enum SensorGroup: String {
|
||||
case system = "Systems"
|
||||
case sensor = "Sensors"
|
||||
case hid = "HID"
|
||||
case unknown = "Unknown"
|
||||
}
|
||||
|
||||
internal enum SensorType: String {
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Качване";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Carregant";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronizace ovládání ventilátoru";
|
||||
"Current" = "Proud";
|
||||
"Energy" = "Energie";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Nahrávání";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Upload";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Lüfter synchron halten";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Upload";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Μεταφόρτωση";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Upload";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Carga";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Upload";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "העלאה";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Sinkroniziraj upravljanje ventilatora";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Slanje";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Ventilátor vezérlés szinkronizálása";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Feltöltés";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Unggah";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Upload";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "送信";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "팬 제어 동기화";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "업로드";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Opplasting";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Uploaden";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronizuj sterowanie wentylatorami";
|
||||
"Current" = "Prąd";
|
||||
"Energy" = "Energia";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Wysyłanie";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Enviando";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Enviando";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synchronize fan's control";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Incarcă";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Синхронизировать управление вентиляторами";
|
||||
"Current" = "Ток";
|
||||
"Energy" = "Энергия";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Выгрузка";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Sinhroniziraj krmiljenje ventilatorja";
|
||||
"Current" = "Tok";
|
||||
"Energy" = "Energija";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Oddajanje";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Synkronisera fläktkontroll";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Skickar";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Fanın kontrolünü senkronize et";
|
||||
"Current" = "Akım";
|
||||
"Energy" = "Enerji";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Yükleme";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Синхронізація керування вентиляторами";
|
||||
"Current" = "Струм";
|
||||
"Energy" = "Енергія";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Висилання";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "Đồng bộ hóa điều khiển của quạt";
|
||||
"Current" = "Current";
|
||||
"Energy" = "Energy";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "Tải lên";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "同步控制风扇";
|
||||
"Current" = "电流";
|
||||
"Energy" = "能耗";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "上传";
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
"Synchronize fan's control" = "同步風扇控制";
|
||||
"Current" = "電流";
|
||||
"Energy" = "能耗";
|
||||
"Show unknown sensors" = "Show unknown sensors";
|
||||
|
||||
// Network
|
||||
"Uploading" = "上傳";
|
||||
|
||||
Reference in New Issue
Block a user