fix: update fan mode after waking up from sleep (#636)

This commit is contained in:
Serhiy Mytrovtsiy
2021-10-04 23:20:01 +02:00
parent d1b63edbed
commit 6ad4701930

View File

@@ -70,6 +70,7 @@ internal class FanView: NSStackView {
private var slider: NSSlider? = nil
private var controlView: NSView? = nil
private var modeButtons: ModeButtons? = nil
private var debouncer: DispatchWorkItem? = nil
private var minBtn: NSButton? = nil
@@ -103,6 +104,7 @@ internal class FanView: NSStackView {
return self.fan.value
}
}
private var resetModeAfterSleep: Bool = false
public init(_ fan: Fan, width: CGFloat, callback: @escaping (() -> Void)) {
self.fan = fan
@@ -133,12 +135,18 @@ internal class FanView: NSStackView {
let h = self.arrangedSubviews.map({ $0.bounds.height }).reduce(0, +) + (inset*2)
self.setFrameSize(NSSize(width: self.frame.width, height: h))
self.sizeCallback()
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(self.wakeListener), name: NSWorkspace.didWakeNotification, object: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
NSWorkspace.shared.notificationCenter.removeObserver(self)
}
override func updateLayer() {
self.layer?.backgroundColor = isDarkMode ? NSColor(hexString: "#111111", alpha: 0.25).cgColor : NSColor(hexString: "#f5f5f5", alpha: 1).cgColor
}
@@ -243,6 +251,7 @@ internal class FanView: NSStackView {
}
view.addSubview(buttons)
self.modeButtons = buttons
return view
}
@@ -387,6 +396,10 @@ internal class FanView: NSStackView {
self.setSpeed(value: Int(self.fan.maxSpeed))
}
@objc private func wakeListener(aNotification: NSNotification) {
self.resetModeAfterSleep = true
}
public func update(_ value: Fan) {
DispatchQueue.main.async(execute: {
if (self.window?.isVisible ?? false) || !self.ready {
@@ -400,6 +413,15 @@ internal class FanView: NSStackView {
self.percentageField?.stringValue = percentage
self.valueField?.stringValue = value.formattedValue
if self.resetModeAfterSleep && value.mode != .automatic {
if self.sliderValueField?.stringValue != "" && self.slider?.doubleValue != value.value {
self.slider?.doubleValue = value.value
self.sliderValueField?.stringValue = ""
}
self.modeButtons?.setManualMode()
self.resetModeAfterSleep = false
}
self.ready = true
}
})
@@ -462,7 +484,7 @@ private class ModeButtons: NSStackView {
fatalError("init(coder:) has not been implemented")
}
@objc func autoMode(_ sender: NSButton) {
@objc private func autoMode(_ sender: NSButton) {
if sender.state.rawValue == 0 {
self.autoBtn.state = .on
return
@@ -473,7 +495,7 @@ private class ModeButtons: NSStackView {
self.callback(.automatic)
}
@objc func manualMode(_ sender: NSButton) {
@objc private func manualMode(_ sender: NSButton) {
if sender.state.rawValue == 0 {
self.manualBtn.state = .on
return
@@ -484,7 +506,7 @@ private class ModeButtons: NSStackView {
self.callback(.forced)
}
@objc func turboMode(_ sender: NSButton) {
@objc private func turboMode(_ sender: NSButton) {
if sender.state.rawValue == 0 {
self.turboBtn.state = .on
return
@@ -494,4 +516,11 @@ private class ModeButtons: NSStackView {
self.autoBtn.state = .off
self.turbo()
}
public func setManualMode() {
self.manualBtn.state = .on
self.autoBtn.state = .off
self.turboBtn.state = .off
self.callback(.forced)
}
}