mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-01-11 09:28:38 +00:00
61 lines
1.9 KiB
Swift
61 lines
1.9 KiB
Swift
import Foundation
|
|
|
|
class AppleScriptTouchBarItem: NSCustomTouchBarItem {
|
|
private var script: NSAppleScript!
|
|
private let button = NSButton(title: "", target: nil, action: nil)
|
|
private let interval: TimeInterval
|
|
|
|
init?(identifier: NSTouchBarItem.Identifier, source: Source, interval: TimeInterval) {
|
|
self.interval = interval
|
|
super.init(identifier: identifier)
|
|
self.view = button
|
|
guard let source = source.string else {
|
|
button.title = "no script"
|
|
return
|
|
}
|
|
guard let script = NSAppleScript(source: source) else {
|
|
button.title = "isn't a script"
|
|
return
|
|
}
|
|
self.script = script
|
|
button.bezelColor = .clear
|
|
button.title = "compile"
|
|
DispatchQueue.main.async {
|
|
var error: NSDictionary?
|
|
guard script.compileAndReturnError(&error) else {
|
|
print(error?.description ?? "unknown error")
|
|
DispatchQueue.main.async {
|
|
self.button.title = "compile error"
|
|
}
|
|
return
|
|
}
|
|
self.refreshAndSchedule()
|
|
}
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
func refreshAndSchedule() {
|
|
print("refresh happened")
|
|
let scriptResult = self.execute()
|
|
DispatchQueue.main.async {
|
|
self.button.title = scriptResult
|
|
}
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + self.interval) { [weak self] in
|
|
self?.refreshAndSchedule()
|
|
}
|
|
}
|
|
|
|
func execute() -> String {
|
|
var error: NSDictionary?
|
|
let output = script.executeAndReturnError(&error)
|
|
if let error = error {
|
|
print(error)
|
|
return "error"
|
|
}
|
|
return output.stringValue ?? "empty value"
|
|
}
|
|
}
|