mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 21:43:41 +00:00
Add skip, play/pause, and fullscreen shortcuts to macOS player
This commit is contained in:
parent
97b16cfd04
commit
9d4446a6ef
@ -177,6 +177,11 @@ final class PlayerModel: ObservableObject {
|
|||||||
@Default(.playerRate) var playerRate
|
@Default(.playerRate) var playerRate
|
||||||
@Default(.systemControlsSeekDuration) var systemControlsSeekDuration
|
@Default(.systemControlsSeekDuration) var systemControlsSeekDuration
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
@Default(.buttonBackwardSeekDuration) private var buttonBackwardSeekDuration
|
||||||
|
@Default(.buttonForwardSeekDuration) private var buttonForwardSeekDuration
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !os(macOS)
|
#if !os(macOS)
|
||||||
@Default(.closePiPAndOpenPlayerOnEnteringForeground) var closePiPAndOpenPlayerOnEnteringForeground
|
@Default(.closePiPAndOpenPlayerOnEnteringForeground) var closePiPAndOpenPlayerOnEnteringForeground
|
||||||
#endif
|
#endif
|
||||||
@ -188,6 +193,10 @@ final class PlayerModel: ObservableObject {
|
|||||||
var rateToRestore: Float?
|
var rateToRestore: Float?
|
||||||
private var remoteCommandCenterConfigured = false
|
private var remoteCommandCenterConfigured = false
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
var keyPressMonitor: Any?
|
||||||
|
#endif
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
#if !os(macOS)
|
#if !os(macOS)
|
||||||
mpvBackend.controller = mpvController
|
mpvBackend.controller = mpvController
|
||||||
@ -212,6 +221,7 @@ final class PlayerModel: ObservableObject {
|
|||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
if presentingPlayer {
|
if presentingPlayer {
|
||||||
Windows.player.focus()
|
Windows.player.focus()
|
||||||
|
assignKeyPressMonitor()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -227,6 +237,7 @@ final class PlayerModel: ObservableObject {
|
|||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
Windows.player.open()
|
Windows.player.open()
|
||||||
Windows.player.focus()
|
Windows.player.focus()
|
||||||
|
assignKeyPressMonitor()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,6 +257,7 @@ final class PlayerModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
destroyKeyPressMonitor()
|
||||||
Windows.player.hide()
|
Windows.player.hide()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -1146,4 +1158,46 @@ final class PlayerModel: ObservableObject {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
private func assignKeyPressMonitor() {
|
||||||
|
keyPressMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { keyEvent -> NSEvent? in
|
||||||
|
switch keyEvent.keyCode {
|
||||||
|
case 124:
|
||||||
|
if !self.liveStreamInAVPlayer {
|
||||||
|
let interval = TimeInterval(self.buttonForwardSeekDuration) ?? 10
|
||||||
|
self.backend.seek(
|
||||||
|
relative: .secondsInDefaultTimescale(interval),
|
||||||
|
seekType: .userInteracted
|
||||||
|
)
|
||||||
|
}
|
||||||
|
case 123:
|
||||||
|
if !self.liveStreamInAVPlayer {
|
||||||
|
let interval = TimeInterval(self.buttonBackwardSeekDuration) ?? 10
|
||||||
|
self.backend.seek(
|
||||||
|
relative: .secondsInDefaultTimescale(-interval),
|
||||||
|
seekType: .userInteracted
|
||||||
|
)
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
self.toggleFullscreen(
|
||||||
|
self.playingFullScreen,
|
||||||
|
showControls: false
|
||||||
|
)
|
||||||
|
case 49:
|
||||||
|
if !self.controls.isLoadingVideo {
|
||||||
|
self.backend.togglePlay()
|
||||||
|
}
|
||||||
|
default: return keyEvent
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func destroyKeyPressMonitor() {
|
||||||
|
if let keyPressMonitor = keyPressMonitor {
|
||||||
|
NSEvent.removeMonitor(keyPressMonitor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user