fix: cherry-pick changes from #2983 to fix the automatic fan mode after sleep

This commit is contained in:
Serhiy Mytrovtsiy
2026-03-01 18:11:23 +01:00
parent 66552a567c
commit 08a5b0260b
3 changed files with 11 additions and 11 deletions

View File

@@ -92,7 +92,7 @@ public class Sensors: Module {
reader.list.sensors.filter({ $0 is Fan }).forEach { (s: Sensor_p) in reader.list.sensors.filter({ $0 is Fan }).forEach { (s: Sensor_p) in
if let f = s as? Fan, let mode = f.customMode { if let f = s as? Fan, let mode = f.customMode {
if mode != .automatic { if !mode.isAutomatic {
SMCHelper.shared.setFanMode(f.id, mode: FanMode.automatic.rawValue) SMCHelper.shared.setFanMode(f.id, mode: FanMode.automatic.rawValue)
} }
} }

View File

@@ -84,7 +84,7 @@ internal class Popup: PopupWrapper {
@objc private func checkFanModesAndResetFtst() { @objc private func checkFanModesAndResetFtst() {
let fanViews = self.list.values.compactMap { $0 as? FanView } let fanViews = self.list.values.compactMap { $0 as? FanView }
guard !fanViews.isEmpty else { return } guard !fanViews.isEmpty else { return }
guard fanViews.allSatisfy({ $0.fan.mode == .automatic }) else { return } guard fanViews.allSatisfy({ $0.fan.mode.isAutomatic }) else { return }
SMCHelper.shared.resetFanControl() SMCHelper.shared.resetFanControl()
} }
#endif #endif
@@ -855,7 +855,7 @@ internal class FanView: NSStackView {
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
SMCHelper.shared.setFanMode(self.fan.id, mode: mode.rawValue) SMCHelper.shared.setFanMode(self.fan.id, mode: mode.rawValue)
self.modeButtons?.setMode(mode) self.modeButtons?.setMode(mode)
if mode != .automatic { if !mode.isAutomatic {
self.setSpeed(value: speed, then: { self.setSpeed(value: speed, then: {
DispatchQueue.main.async { DispatchQueue.main.async {
self.sliderValueField?.textColor = .systemBlue self.sliderValueField?.textColor = .systemBlue
@@ -868,7 +868,7 @@ internal class FanView: NSStackView {
self.willSleepSpeed = nil self.willSleepSpeed = nil
} }
if let value = self.fan.customSpeed, self.fan.mode != .automatic { if let value = self.fan.customSpeed, !self.fan.mode.isAutomatic {
self.setSpeed(value: value, then: { self.setSpeed(value: value, then: {
DispatchQueue.main.async { DispatchQueue.main.async {
self.sliderValueField?.textColor = .systemBlue self.sliderValueField?.textColor = .systemBlue
@@ -878,9 +878,9 @@ internal class FanView: NSStackView {
} }
@objc private func sleepListener(aNotification: NSNotification) { @objc private func sleepListener(aNotification: NSNotification) {
guard SMCHelper.shared.isActive() && self.fan.customMode != .automatic else { return } guard SMCHelper.shared.isActive(), let mode = self.fan.customMode, !mode.isAutomatic else { return }
self.willSleepMode = self.fan.customMode self.willSleepMode = mode
self.willSleepSpeed = self.fan.customSpeed self.willSleepSpeed = self.fan.customSpeed
SMCHelper.shared.setFanMode(fan.id, mode: FanMode.automatic.rawValue) SMCHelper.shared.setFanMode(fan.id, mode: FanMode.automatic.rawValue)
self.modeButtons?.setMode(.automatic) self.modeButtons?.setMode(.automatic)
@@ -925,7 +925,7 @@ internal class FanView: NSStackView {
v.setFrameSize(NSSize(width: width, height: v.frame.height)) v.setFrameSize(NSSize(width: width, height: v.frame.height))
} }
if self.resetModeAfterSleep && value.mode != .automatic { if self.resetModeAfterSleep && !value.mode.isAutomatic {
if self.sliderValueField?.stringValue != "" && self.slider?.doubleValue != value.value { if self.sliderValueField?.stringValue != "" && self.slider?.doubleValue != value.value {
self.slider?.doubleValue = value.value self.slider?.doubleValue = value.value
self.sliderValueField?.stringValue = "" self.sliderValueField?.stringValue = ""
@@ -1031,7 +1031,7 @@ private class ModeButtons: NSStackView {
self.autoBtn.setButtonType(.toggle) self.autoBtn.setButtonType(.toggle)
self.autoBtn.isBordered = false self.autoBtn.isBordered = false
self.autoBtn.target = self self.autoBtn.target = self
self.autoBtn.state = mode == .automatic ? .on : .off self.autoBtn.state = mode.isAutomatic ? .on : .off
self.manualBtn.setButtonType(.toggle) self.manualBtn.setButtonType(.toggle)
self.manualBtn.isBordered = false self.manualBtn.isBordered = false
@@ -1180,7 +1180,7 @@ private class ModeButtons: NSStackView {
} }
public func setMode(_ mode: FanMode) { public func setMode(_ mode: FanMode) {
if mode == .automatic { if mode.isAutomatic {
self.autoBtn.state = .on self.autoBtn.state = .on
self.manualBtn.state = .off self.manualBtn.state = .off
self.offBtn.state = .off self.offBtn.state = .off

View File

@@ -331,8 +331,8 @@ extension SensorsReader {
} }
} }
if let md = SMC.shared.getValue("F\(i)Md") { if let md = SMC.shared.getValue("F\(i)Md"), let parsed = FanMode(rawValue: Int(md)) {
mode = FanMode(rawValue: Int(md)) ?? .automatic mode = parsed.isAutomatic ? .automatic : parsed
} else { } else {
mode = self.getFanMode(i) mode = self.getFanMode(i)
} }