mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +02:00
reimplement playback hotkeys
This commit is contained in:
@@ -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);
|
||||
};
|
||||
Reference in New Issue
Block a user