reimplement playback hotkeys

This commit is contained in:
jeffvli
2025-11-29 22:04:10 -08:00
parent 801e2cdcf4
commit aab19b289b
2 changed files with 42 additions and 0 deletions
@@ -8,6 +8,7 @@ import { MpvPlayer } from '/@/renderer/features/player/audio-player/mpv-player';
import { WebPlayer } from '/@/renderer/features/player/audio-player/web-player';
import { useMediaSession } from '/@/renderer/features/player/hooks/use-media-session';
import { useMPRIS } from '/@/renderer/features/player/hooks/use-mpris';
import { usePlaybackHotkeys } from '/@/renderer/features/player/hooks/use-playback-hotkeys';
import { usePowerSaveBlocker } from '/@/renderer/features/player/hooks/use-power-save-blocker';
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
import {
@@ -29,6 +30,7 @@ export const AudioPlayers = () => {
useMPRIS();
useMainPlayerListener();
useMediaSession();
usePlaybackHotkeys();
// Listen to favorite and rating events to update queue songs
useEffect(() => {
@@ -0,0 +1,40 @@
import { useMemo } from 'react';
import { useHotkeySettings, usePlayerStore } from '/@/renderer/store';
import { HotkeyItem, useHotkeys } from '/@/shared/hooks/use-hotkeys';
export const usePlaybackHotkeys = () => {
const { bindings } = useHotkeySettings();
const player = usePlayerStore();
const playbackHotkeysItems = useMemo(() => {
const hotkeyItems: HotkeyItem[] = [];
const bindingHandlers: Array<{
binding: (typeof bindings)[keyof typeof bindings];
handler: () => void;
}> = [
{ binding: bindings.next, handler: () => player.mediaNext() },
{ binding: bindings.pause, handler: () => player.mediaPause() },
{ binding: bindings.play, handler: () => player.mediaPlay() },
{ binding: bindings.playPause, handler: () => player.mediaTogglePlayPause() },
{ binding: bindings.previous, handler: () => player.mediaPrevious() },
{ binding: bindings.skipBackward, handler: () => player.mediaSkipBackward() },
{ binding: bindings.skipForward, handler: () => player.mediaSkipForward() },
{ binding: bindings.stop, handler: () => player.mediaStop() },
{ binding: bindings.toggleRepeat, handler: () => player.toggleRepeat() },
{ binding: bindings.toggleShuffle, handler: () => player.toggleShuffle() },
];
// Filter and map to hotkey items
bindingHandlers.forEach(({ binding, handler }) => {
if (!binding.isGlobal && binding.hotkey && binding.hotkey !== '') {
hotkeyItems.push([binding.hotkey, handler]);
}
});
return hotkeyItems;
}, [bindings, player]);
useHotkeys(playbackHotkeysItems);
};