mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-10 04:30:25 +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 { WebPlayer } from '/@/renderer/features/player/audio-player/web-player';
|
||||||
import { useMediaSession } from '/@/renderer/features/player/hooks/use-media-session';
|
import { useMediaSession } from '/@/renderer/features/player/hooks/use-media-session';
|
||||||
import { useMPRIS } from '/@/renderer/features/player/hooks/use-mpris';
|
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 { usePowerSaveBlocker } from '/@/renderer/features/player/hooks/use-power-save-blocker';
|
||||||
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
|
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
|
||||||
import {
|
import {
|
||||||
@@ -29,6 +30,7 @@ export const AudioPlayers = () => {
|
|||||||
useMPRIS();
|
useMPRIS();
|
||||||
useMainPlayerListener();
|
useMainPlayerListener();
|
||||||
useMediaSession();
|
useMediaSession();
|
||||||
|
usePlaybackHotkeys();
|
||||||
|
|
||||||
// Listen to favorite and rating events to update queue songs
|
// Listen to favorite and rating events to update queue songs
|
||||||
useEffect(() => {
|
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