diff --git a/MTMR/BrightnessViewController.swift b/MTMR/BrightnessViewController.swift index 043ba8a..ad9fab1 100644 --- a/MTMR/BrightnessViewController.swift +++ b/MTMR/BrightnessViewController.swift @@ -6,7 +6,7 @@ import CoreAudio class BrightnessViewController: NSCustomTouchBarItem { private(set) var sliderItem: NSSlider! - init(identifier: NSTouchBarItem.Identifier, image: NSImage? = nil) { + init(identifier: NSTouchBarItem.Identifier, refreshInterval: Double, image: NSImage? = nil) { super.init(identifier: identifier) let brightness:Double = Double(getBrightness()) sliderItem = NSSlider(value: brightness*100.0, minValue: 0.0, maxValue: 100.0, target: self, action:#selector(BrightnessViewController.sliderValueChanged(_:))) @@ -16,12 +16,21 @@ class BrightnessViewController: NSCustomTouchBarItem { } self.view = sliderItem + + let timer = Timer.scheduledTimer(timeInterval: refreshInterval, target: self, selector: #selector(BrightnessViewController.updateBrightnessSlider), userInfo: nil, repeats: true) + RunLoop.current.add(timer, forMode: RunLoopMode.commonModes) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + @objc func updateBrightnessSlider() { + DispatchQueue.main.async { + self.sliderItem.floatValue = self.getBrightness() * 100 + } + } + @objc func sliderValueChanged(_ sender: Any) { if let sliderItem = sender as? NSSlider { setBrightness(level: Float32(sliderItem.intValue)/100.0) diff --git a/MTMR/ItemsParsing.swift b/MTMR/ItemsParsing.swift index 888a790..1de608c 100644 --- a/MTMR/ItemsParsing.swift +++ b/MTMR/ItemsParsing.swift @@ -79,6 +79,12 @@ class SupportedTypesHolder { let item = ItemType.appleScriptTitledButton(source: Source(filePath: scriptPath), refreshInterval: interval ?? 1800.0) return (item: item, action: .none, parameters: []) }, + "brightness": { decoder in + enum CodingKeys: String, CodingKey { case refreshInterval } + let container = try decoder.container(keyedBy: CodingKeys.self) + let interval = try container.decodeIfPresent(Double.self, forKey: .refreshInterval) + return (item: .brightness(refreshInterval: interval ?? 0.5), action: .none) + }, "battery": { decoder in enum CodingKeys: String, CodingKey { case refreshInterval } let container = try decoder.container(keyedBy: CodingKeys.self) @@ -116,7 +122,7 @@ enum ItemType: Decodable { case timeButton(formatTemplate: String) case flexSpace() case volume() - case brightness() + case brightness(refreshInterval: Double) private enum CodingKeys: String, CodingKey { case type @@ -155,7 +161,8 @@ enum ItemType: Decodable { case .volume: self = .volume() case .brightness: - self = .brightness() + let interval = try container.decodeIfPresent(Double.self, forKey: .refreshInterval) ?? 0.5 + self = .brightness(refreshInterval: interval) } } } diff --git a/MTMR/TouchBarController.swift b/MTMR/TouchBarController.swift index 0eee90d..6f6aa14 100644 --- a/MTMR/TouchBarController.swift +++ b/MTMR/TouchBarController.swift @@ -27,7 +27,7 @@ extension ItemType { return "NSTouchBarItem.Identifier.flexibleSpace" case .volume(): return "com.toxblh.mtmr.volume" - case .brightness(): + case .brightness(refreshInterval: _): return "com.toxblh.mtmr.brightness" } } @@ -117,8 +117,8 @@ class TouchBarController: NSObject, NSTouchBarDelegate { barItem = nil case .volume: barItem = VolumeViewController(identifier: identifier) - case .brightness: - barItem = BrightnessViewController(identifier: identifier) + case .brightness(refreshInterval: let interval): + barItem = BrightnessViewController(identifier: identifier, refreshInterval: interval) } for parameter in item.additionalParameters { if case .width(let value) = parameter, let widthBarItem = barItem as? CanSetWidth {