fix playback controls being called multiple times on media key input

This commit is contained in:
jeffvli 2025-10-13 04:33:11 -07:00
parent 68476deb98
commit 1b8661d566
2 changed files with 37 additions and 21 deletions

View file

@ -57,6 +57,7 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
handlePlay, handlePlay,
handlePlayPause, handlePlayPause,
handlePrevTrack, handlePrevTrack,
handleSeekSlider,
handleSkipBackward, handleSkipBackward,
handleSkipForward, handleSkipForward,
handleStop, handleStop,
@ -84,7 +85,16 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
], ],
]); ]);
useMediaSession(playersRef); useMediaSession({
handleNextTrack,
handlePause,
handlePlay,
handlePrevTrack,
handleSeekSlider,
handleSkipBackward,
handleSkipForward,
handleStop,
});
return ( return (
<> <>
@ -227,22 +237,24 @@ export const CenterControls = ({ playersRef }: CenterControlsProps) => {
/> />
</div> </div>
</div> </div>
<PlayerSeekSlider player1={player1} player2={player2} playersRef={playersRef} /> <PlayerSeekSlider
handleSeekSlider={handleSeekSlider}
player1={player1}
player2={player2}
/>
</> </>
); );
}; };
const PlayerSeekSlider = ({ const PlayerSeekSlider = ({
handleSeekSlider,
player1, player1,
player2, player2,
playersRef,
}: { }: {
handleSeekSlider: (e: any | number) => void;
player1: any; player1: any;
player2: any; player2: any;
playersRef: any;
}) => { }) => {
const { handleSeekSlider } = useCenterControls({ playersRef });
const player = useCurrentPlayer(); const player = useCurrentPlayer();
const playbackType = usePlaybackType(); const playbackType = usePlaybackType();
const setCurrentTime = useSetCurrentTime(); const setCurrentTime = useSetCurrentTime();

View file

@ -1,6 +1,5 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { useCenterControls } from '/@/renderer/features/player/hooks/use-center-controls';
import { import {
useCurrentSong, useCurrentSong,
useCurrentStatus, useCurrentStatus,
@ -9,26 +8,31 @@ import {
} from '/@/renderer/store'; } from '/@/renderer/store';
import { PlayerStatus } from '/@/shared/types/types'; import { PlayerStatus } from '/@/shared/types/types';
export const useMediaSession = (playersRef: { player1: any; player2: any }) => { export const useMediaSession = ({
handleNextTrack,
handlePause,
handlePlay,
handlePrevTrack,
handleSeekSlider,
handleSkipBackward,
handleSkipForward,
handleStop,
}: {
handleNextTrack: () => void;
handlePause: () => void;
handlePlay: () => void;
handlePrevTrack: () => void;
handleSeekSlider: (e: any | number) => void;
handleSkipBackward: (seconds: number) => void;
handleSkipForward: (seconds: number) => void;
handleStop: () => void;
}) => {
const { mediaSession: mediaSessionEnabled } = usePlaybackSettings(); const { mediaSession: mediaSessionEnabled } = usePlaybackSettings();
const playerStatus = useCurrentStatus(); const playerStatus = useCurrentStatus();
const currentSong = useCurrentSong(); const currentSong = useCurrentSong();
const mediaSession = navigator.mediaSession; const mediaSession = navigator.mediaSession;
const skip = useSettingsStore((state) => state.general.skipButtons); const skip = useSettingsStore((state) => state.general.skipButtons);
const {
handleNextTrack,
handlePause,
handlePlay,
handlePrevTrack,
handleSeekSlider,
handleSkipBackward,
handleSkipForward,
handleStop,
} = useCenterControls({
playersRef,
});
useEffect(() => { useEffect(() => {
if (!mediaSessionEnabled || !mediaSession) { if (!mediaSessionEnabled || !mediaSession) {
return; return;