|
|
|
@ -11,6 +11,7 @@ import MediaToolbox
|
|
|
|
|
|
|
|
|
|
class NowPlayingItem: NSCustomTouchBarItem {
|
|
|
|
|
|
|
|
|
|
var nowPlayingClientID: String?
|
|
|
|
|
var nowPlayingTitle: String?
|
|
|
|
|
var nowPlayingArtist: String?
|
|
|
|
|
var nowPlayingAlbum: String?
|
|
|
|
@ -30,6 +31,10 @@ class NowPlayingItem: NSCustomTouchBarItem {
|
|
|
|
|
|
|
|
|
|
button.widthAnchor.constraint(equalToConstant: 200).isActive = true
|
|
|
|
|
|
|
|
|
|
let longPressRecognizer = NSPressGestureRecognizer(target: self, action: #selector(buttonLongPressed))
|
|
|
|
|
longPressRecognizer.allowedTouchTypes = .direct
|
|
|
|
|
button.addGestureRecognizer(longPressRecognizer)
|
|
|
|
|
|
|
|
|
|
view = button
|
|
|
|
|
|
|
|
|
|
MRMediaRemoteRegisterForNowPlayingNotifications(.global(qos: .utility))
|
|
|
|
@ -61,6 +66,14 @@ class NowPlayingItem: NSCustomTouchBarItem {
|
|
|
|
|
self.updateButtonTitle()
|
|
|
|
|
self.updateButtonImage()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MRMediaRemoteGetNowPlayingClient(.main) { (client) in
|
|
|
|
|
guard let client = client else {
|
|
|
|
|
self.nowPlayingClientID = nil
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
self.nowPlayingClientID = MRNowPlayingClientGetBundleIdentifier(client)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func updateButtonTitle() {
|
|
|
|
@ -82,6 +95,7 @@ class NowPlayingItem: NSCustomTouchBarItem {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func updateButtonImage() {
|
|
|
|
|
// todo: custom spotify artwork helper
|
|
|
|
|
if let data = nowPlayingArtwork,
|
|
|
|
|
let image = NSImage(data: data) {
|
|
|
|
|
button.image = image
|
|
|
|
@ -124,4 +138,11 @@ class NowPlayingItem: NSCustomTouchBarItem {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@objc func buttonLongPressed(recognizer: NSPressGestureRecognizer) {
|
|
|
|
|
if recognizer.state == .began,
|
|
|
|
|
let nowPlayingClientID = nowPlayingClientID {
|
|
|
|
|
NSWorkspace.shared.launchApplication(withBundleIdentifier: nowPlayingClientID, options: .default, additionalEventParamDescriptor: nil, launchIdentifier: nil)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|