-
-
Notifications
You must be signed in to change notification settings - Fork 225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(player): Add media key control support #2001
Open
endrl
wants to merge
10
commits into
jellyfin:master
Choose a base branch
from
endrl:mediakeys
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 4 commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
d57e40d
feat(player): implement keyboard keys
endrl a5ddde8
refactor: replace with noop function
ferferga e540643
refactor: useMagicKeys only, remove unnecessary
ferferga f4d07b9
refactor: remove unnecessary checks since covered already by the setters
ferferga a6d494d
fix: rename toggleFullscreenVideoPlayer
endrl 5222f14
refactor: remove keyboard plugin from fullscreen music playback
ferferga 9c559e8
refactor: add composable to index
ferferga 78668b6
refactor: check playerElement instead
ferferga 8128fdc
refactor: focus sliders programatically
ferferga c8eccfe
feat: reorder logic
ferferga File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import { whenever, useMagicKeys, noop } from '@vueuse/core'; | ||
import { playbackManagerStore, playerElementStore } from '@/store'; | ||
import { isTizen, isWebOS } from '@/utils/browser-detection'; | ||
|
||
/** | ||
* Register keyboard player control. | ||
* @param fullscreen - Arrow key updates when playback is happening outside of fullscreen are ignored | ||
* @param osdHandler - show the player osd for a short period whenever a suitable action is called | ||
*/ | ||
export function usePlayerKeys(fullscreen = false, osdHandler = noop): void { | ||
const keys = useMagicKeys(); | ||
const playbackManager = playbackManagerStore(); | ||
const playerElement = playerElementStore(); | ||
|
||
const forwardFn = (): void => { | ||
playbackManager.skipForward(); | ||
osdHandler(); | ||
}; | ||
const backwardFn = (): void => { | ||
playbackManager.skipBackward(); | ||
osdHandler(); | ||
}; | ||
|
||
whenever(keys.MediaPause, playbackManager.pause); | ||
whenever(keys.Pause, playbackManager.pause); | ||
whenever(keys.MediaPlay, playbackManager.unpause); | ||
whenever(keys.MediaPlayPause, playbackManager.playPause); | ||
whenever(keys.MediaStop, playbackManager.stop); | ||
whenever(keys.Exit, playbackManager.stop); | ||
whenever(keys.MediaTrackNext, playbackManager.setNextTrack); | ||
whenever(keys.MediaTrackPrevious, playbackManager.setPreviousTrack); | ||
whenever(keys.MediaFastForward, forwardFn); | ||
whenever(keys.MediaRewind, backwardFn); | ||
whenever(keys.AudioVolumeMute, playbackManager.toggleMute); | ||
whenever(keys.AudioVolumeUp, playbackManager.volumeUp); | ||
whenever(keys.AudioVolumeDown, playbackManager.volumeDown); | ||
|
||
whenever(keys.f, playerElement.toggleFullscreenPlayer); | ||
whenever(keys.space, playbackManager.playPause); | ||
whenever(keys.k, playbackManager.playPause); | ||
whenever(keys.m, playbackManager.toggleMute); | ||
whenever(keys.j, backwardFn); | ||
whenever(keys.l, forwardFn); | ||
|
||
if (!isTizen() && !isWebOS() && fullscreen) { | ||
whenever(keys.ArrowUp, playbackManager.volumeUp); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You missed the point of |
||
whenever(keys.ArrowDown, playbackManager.volumeDown); | ||
whenever(keys.ArrowLeft, backwardFn); | ||
whenever(keys.ArrowRight, forwardFn); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we really need to skip these platforms? I'd like to have as less platform-specific stuff as possible
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While thinking about it. up,down,left,right are always used for navigation except:
Did if forgot something? So from code view:
Concept
v-overlay
unmounts the video osd so we can't do -> mount fullscreen video + osd and focus sliderv-overlay
to a div withv-show
to force focus and prevent the above "temporary listener hack"Conclusion:
Depending on the code solution the guards are required as is or modified.
Out of topic: You are immediately at the key navigation . But you don't need a TV for that. Imagine you have just a keyboard with left/top/right/down. If we get that good implemented support for all kind of TV views is ready