summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--osdep/macos/remote_command_center.swift53
-rw-r--r--osdep/macosx_application.m6
2 files changed, 48 insertions, 11 deletions
diff --git a/osdep/macos/remote_command_center.swift b/osdep/macos/remote_command_center.swift
index 7d6e51081c..b08a726183 100644
--- a/osdep/macos/remote_command_center.swift
+++ b/osdep/macos/remote_command_center.swift
@@ -87,7 +87,10 @@ class RemoteCommandCenter: NSObject {
MPRemoteCommandCenter.shared().bookmarkCommand,
]
- let application: Application;
+ let application: Application
+
+ var mpInfoCenter: MPNowPlayingInfoCenter { get { return MPNowPlayingInfoCenter.default() } }
+ var isPaused: Bool = false { didSet { updatePlaybackState() } }
@objc init(app: Application) {
application = app
@@ -99,11 +102,6 @@ class RemoteCommandCenter: NSObject {
}
}
- @objc func makeCurrent() {
- MPNowPlayingInfoCenter.default().playbackState = .paused
- MPNowPlayingInfoCenter.default().playbackState = .playing
- }
-
@objc func start() {
for (cmd, _) in config {
cmd.isEnabled = true
@@ -119,8 +117,8 @@ class RemoteCommandCenter: NSObject {
nowPlayingInfo[MPMediaItemPropertyArtwork] = albumArt
}
- MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
- MPNowPlayingInfoCenter.default().playbackState = .playing
+ mpInfoCenter.nowPlayingInfo = nowPlayingInfo
+ mpInfoCenter.playbackState = .playing
}
@objc func stop() {
@@ -129,8 +127,18 @@ class RemoteCommandCenter: NSObject {
cmd.removeTarget(nil)
}
- MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
- MPNowPlayingInfoCenter.default().playbackState = .unknown
+ mpInfoCenter.nowPlayingInfo = nil
+ mpInfoCenter.playbackState = .unknown
+ }
+
+ @objc func makeCurrent() {
+ mpInfoCenter.playbackState = .paused
+ mpInfoCenter.playbackState = .playing
+ updatePlaybackState()
+ }
+
+ func updatePlaybackState() {
+ mpInfoCenter.playbackState = isPaused ? .paused : .playing
}
func cmdHandler(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
@@ -156,4 +164,27 @@ class RemoteCommandCenter: NSObject {
return .success
}
-} \ No newline at end of file
+
+ @objc func processEvent(_ event: UnsafeMutablePointer<mpv_event>) {
+ switch event.pointee.event_id {
+ case MPV_EVENT_PROPERTY_CHANGE:
+ handlePropertyChange(event)
+ default:
+ break
+ }
+ }
+
+ func handlePropertyChange(_ event: UnsafeMutablePointer<mpv_event>) {
+ let pData = OpaquePointer(event.pointee.data)
+ guard let property = UnsafePointer<mpv_event_property>(pData)?.pointee else {
+ return
+ }
+
+ switch String(cString: property.name) {
+ case "pause" where property.format == MPV_FORMAT_FLAG:
+ isPaused = LibmpvHelper.mpvFlagToBool(property.data) ?? false
+ default:
+ break
+ }
+ }
+}
diff --git a/osdep/macosx_application.m b/osdep/macosx_application.m
index 43f3bb4a4f..d553c69158 100644
--- a/osdep/macosx_application.m
+++ b/osdep/macosx_application.m
@@ -174,6 +174,12 @@ static const char macosx_icon[] =
if ([self respondsToSelector:@selector(touchBar)])
[(TouchBar *)self.touchBar processEvent:event];
#endif
+#if HAVE_MACOS_MEDIA_PLAYER
+ // 10.12.2 runtime availability check
+ if ([self respondsToSelector:@selector(touchBar)]) {
+ [_remoteCommandCenter processEvent:event];
+ }
+#endif
if (_cocoa_cb) {
[_cocoa_cb processEvent:event];
}