diff --git a/src/main/features/core/player/index.ts b/src/main/features/core/player/index.ts index 319e87e6d..c3a5ae5d0 100644 --- a/src/main/features/core/player/index.ts +++ b/src/main/features/core/player/index.ts @@ -437,10 +437,18 @@ ipcMain.on('player-mute', async (_event, mute: boolean) => { ipcMain.handle('player-get-time', async (): Promise => { try { - return getMpvInstance()?.getTimePosition(); + const mpv = getMpvInstance(); + if (!mpv) { + return undefined; + } + return await mpv.getTimePosition(); } catch (err: any | NodeMpvError) { + // Err 3: IPC command invalid — e.g. time-pos unavailable when idle / between tracks + if (err?.errcode === 3) { + return undefined; + } mpvLog({ action: `Failed to get current time` }, err); - return 0; + return undefined; } }); diff --git a/src/renderer/features/player/audio-player/engine/mpv-player-engine.tsx b/src/renderer/features/player/audio-player/engine/mpv-player-engine.tsx index db370c89c..4e5a5bc9f 100644 --- a/src/renderer/features/player/audio-player/engine/mpv-player-engine.tsx +++ b/src/renderer/features/player/audio-player/engine/mpv-player-engine.tsx @@ -216,6 +216,10 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { return; } + if (playerStatus !== PlayerStatus.PLAYING) { + return; + } + const updateProgress = async () => { if (!mpvPlayer || !isMountedRef.current) { return; @@ -245,7 +249,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { progressIntervalRef.current = null; } }; - }, [hasCurrentSong, isTransitioning, onProgress]); + }, [hasCurrentSong, isTransitioning, onProgress, playerStatus]); const { mediaAutoNext } = usePlayerActions();