trigger stop event on queue end

This commit is contained in:
jeffvli
2026-07-09 20:42:59 -07:00
parent 511875689a
commit e3c2605e1d
6 changed files with 81 additions and 29 deletions
@@ -276,10 +276,21 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
handleMpvAutoNext(transcode);
};
const handleTrackEnded = () => {
const { player } = usePlayerStore.getState();
if (player.status !== PlayerStatus.PLAYING) {
return;
}
mediaAutoNext();
};
mpvPlayerListener.rendererAutoNext(handleOnAutoNext);
mpvPlayerListener.rendererTrackEnded(handleTrackEnded);
return () => {
ipc?.removeAllListeners('renderer-player-auto-next');
ipc?.removeAllListeners('renderer-player-track-ended');
};
}, [mediaAutoNext, onEnded, transcode]);
@@ -16,6 +16,7 @@ import {
usePlayerData,
usePlayerMuted,
usePlayerProperties,
usePlayerStoreBase,
usePlayerVolume,
} from '/@/renderer/store';
import { PlayerStatus, PlayerStyle } from '/@/shared/types/types';
@@ -153,7 +154,13 @@ export function WaveSurferPlayer() {
promise.then(() => {
playerRef.current?.player1()?.ref?.pause();
playerRef.current?.setVolume(volume);
const currentStatus = usePlayerStoreBase.getState().player.status;
if (currentStatus !== PlayerStatus.PLAYING) {
playerRef.current?.pause();
} else {
playerRef.current?.setVolume(volume);
}
setIsTransitioning(false);
});
}, [mediaAutoNext, volume]);
@@ -166,7 +173,13 @@ export function WaveSurferPlayer() {
promise.then(() => {
playerRef.current?.player2()?.ref?.pause();
playerRef.current?.setVolume(volume);
const currentStatus = usePlayerStoreBase.getState().player.status;
if (currentStatus !== PlayerStatus.PLAYING) {
playerRef.current?.pause();
} else {
playerRef.current?.setVolume(volume);
}
setIsTransitioning(false);
});
}, [mediaAutoNext, volume]);
@@ -238,7 +238,7 @@ export function WebPlayer() {
promise.then(() => {
playerRef.current?.player1()?.ref?.getInternalPlayer().pause();
// If mediaAutoNext resulted in a paused state (e.g. end of queue,
// If mediaAutoNext resulted in a stopped/paused state (e.g. end of queue,
// or pauseOnNextSongEnd flag), stop all audio instead of restoring volume.
const currentStatus = usePlayerStoreBase.getState().player.status;
if (currentStatus !== PlayerStatus.PLAYING) {