fix: prevented asking for root when closing the app. It was a bug in the Sensors module that tries to reset the fan mode to the automatic. Now it will check if any of the fan mode was changed.

This commit is contained in:
Serhiy Mytrovtsiy
2022-04-26 07:36:31 +02:00
parent b55baadca1
commit 946b8a4b2f
4 changed files with 49 additions and 41 deletions

View File

@@ -963,7 +963,7 @@ public class SMCHelper {
_ = syncShell("\(self.smc) fan -id \(id) -m \(mode)")
}
private func checkRights() -> Bool {
public func checkRights() -> Bool {
do {
let attributes = try FileManager.default.attributesOfItem(atPath: self.smc)
guard let owner = attributes[FileAttributeKey(rawValue: "NSFileOwnerAccountName")] as? String,

View File

@@ -52,9 +52,15 @@ public class Sensors: Module {
}
public override func willTerminate() {
if !SMCHelper.shared.checkRights() {
return
}
self.sensorsReader.list.filter({ $0 is Fan }).forEach { (s: Sensor_p) in
if let f = s as? Fan {
SMCHelper.shared.setFanMode(f.id, mode: FanMode.automatic.rawValue)
if let f = s as? Fan, let mode = f.customMode {
if mode != .automatic {
SMCHelper.shared.setFanMode(f.id, mode: FanMode.automatic.rawValue)
}
}
}
}

View File

@@ -311,39 +311,9 @@ internal class FanView: NSStackView {
return Store.shared.bool(key: "Sensors_speed", defaultValue: false)
}
}
private var speedValue: Int? {
get {
if !Store.shared.exist(key: "fan_\(self.fan.id)_speed") {
return nil
}
return Store.shared.int(key: "fan_\(self.fan.id)_speed", defaultValue: Int(self.fan.minSpeed))
}
set {
if let value = newValue {
Store.shared.set(key: "fan_\(self.fan.id)_speed", value: value)
} else {
Store.shared.remove("fan_\(self.fan.id)_speed")
}
}
}
private var fanMode: Int? {
get {
if !Store.shared.exist(key: "fan_\(self.fan.id)_mode") {
return nil
}
return Store.shared.int(key: "fan_\(self.fan.id)_mode", defaultValue: FanMode.automatic.rawValue)
}
set {
if let value = newValue {
Store.shared.set(key: "fan_\(self.fan.id)_mode", value: value)
} else {
Store.shared.remove("fan_\(self.fan.id)_mode")
}
}
}
private var speed: Double {
get {
if let v = self.speedValue, self.speedState {
if let v = self.fan.customSpeed, self.speedState {
return Double(v)
}
return self.fan.value
@@ -388,9 +358,9 @@ internal class FanView: NSStackView {
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeListener), name: NSWorkspace.didWakeNotification, object: nil)
if let fanMode = self.fanMode, self.speedState && fanMode != FanMode.automatic.rawValue {
SMCHelper.shared.setFanMode(fan.id, mode: fanMode)
self.modeButtons?.setMode(FanMode(rawValue: fanMode) ?? .automatic)
if let fanMode = self.fan.customMode, self.speedState && fanMode != FanMode.automatic {
SMCHelper.shared.setFanMode(fan.id, mode: fanMode.rawValue)
self.modeButtons?.setMode(FanMode(rawValue: fanMode.rawValue) ?? .automatic)
self.setSpeed(value: Int(self.speed), then: {
DispatchQueue.main.async {
@@ -459,7 +429,7 @@ internal class FanView: NSStackView {
buttons.callback = { [weak self] (mode: FanMode) in
if let fan = self?.fan, fan.mode != mode {
self?.fan.mode = mode
self?.fanMode = mode.rawValue
self?.fan.customMode = mode
SMCHelper.shared.setFanMode(fan.id, mode: mode.rawValue)
}
self?.toggleControlView(mode == .forced)
@@ -471,7 +441,7 @@ internal class FanView: NSStackView {
SMCHelper.shared.setFanMode(fan.id, mode: FanMode.forced.rawValue)
}
SMCHelper.shared.setFanSpeed(fan.id, speed: Int(fan.maxSpeed))
self?.speedValue = Int(fan.maxSpeed)
self?.fan.customSpeed = Int(fan.maxSpeed)
}
self?.toggleControlView(false)
}
@@ -580,7 +550,7 @@ internal class FanView: NSStackView {
private func setSpeed(value: Int, then: @escaping () -> Void = {}) {
self.sliderValueField?.stringValue = "\(value) RPM"
self.sliderValueField?.textColor = .secondaryLabelColor
self.speedValue = value
self.fan.customSpeed = value
self.debouncer?.cancel()
@@ -624,7 +594,7 @@ internal class FanView: NSStackView {
@objc private func wakeListener(aNotification: NSNotification) {
self.resetModeAfterSleep = true
if let value = self.speedValue, self.fan.mode != .automatic {
if let value = self.fan.customSpeed, self.fan.mode != .automatic {
self.setSpeed(value: value)
}
}

View File

@@ -163,6 +163,38 @@ internal struct Fan: Sensor_p {
return Store.shared.bool(key: "sensor_\(self.key)", defaultValue: false)
}
}
var customSpeed: Int? {
get {
if !Store.shared.exist(key: "fan_\(self.id)_speed") {
return nil
}
return Store.shared.int(key: "fan_\(self.id)_speed", defaultValue: Int(self.minSpeed))
}
set {
if let value = newValue {
Store.shared.set(key: "fan_\(self.id)_speed", value: value)
} else {
Store.shared.remove("fan_\(self.id)_speed")
}
}
}
var customMode: FanMode? {
get {
if !Store.shared.exist(key: "fan_\(self.id)_mode") {
return nil
}
let value = Store.shared.int(key: "fan_\(self.id)_mode", defaultValue: FanMode.automatic.rawValue)
return FanMode(rawValue: value)
}
set {
if let value = newValue {
Store.shared.set(key: "fan_\(self.id)_mode", value: value.rawValue)
} else {
Store.shared.remove("fan_\(self.id)_mode")
}
}
}
}
// List of keys: https://github.com/acidanthera/VirtualSMC/blob/master/Docs/SMCSensorKeys.txt