From 0620b096dbcc4cf704fa68b8c702b58294083de1 Mon Sep 17 00:00:00 2001 From: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Date: Tue, 3 Feb 2026 04:49:34 +0000 Subject: [PATCH] fix(mpv): only check player time when there is an item in the track (#1639) --- .../audio-player/engine/mpv-player-engine.tsx | 13 ++++++++++--- .../features/player/audio-player/mpv-player.tsx | 8 +++++--- 2 files changed, 15 insertions(+), 6 deletions(-) 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 183cb6ca3..44c2c5a94 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 @@ -12,6 +12,7 @@ import { getMpvProperties } from '/@/renderer/features/settings/components/playb import { usePlaybackSettings, usePlayerActions, + usePlayerSong, usePlayerStore, useSettingsStore, } from '/@/renderer/store'; @@ -49,7 +50,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { } = props; const [internalVolume, setInternalVolume] = useState(volume / 100 || 0); - const [duration] = useState(0); + const currentSong = usePlayerSong(); const progressIntervalRef = useRef(null); const isInitializedRef = useRef(false); @@ -204,12 +205,18 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { } }, [playerStatus]); + const hasCurrentSong = !!currentSong?.id; + // Set up progress tracking useEffect(() => { if (progressIntervalRef.current) { clearInterval(progressIntervalRef.current); } + if (!hasCurrentSong) { + return; + } + const updateProgress = async () => { if (!mpvPlayer || !isMountedRef.current) { return; @@ -219,7 +226,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { const time = await mpvPlayer.getCurrentTime(); if (time !== undefined && isMountedRef.current) { onProgress({ - played: time / (duration || time + 10), + played: time / (time + 10), playedSeconds: time, }); } @@ -239,7 +246,7 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { progressIntervalRef.current = null; } }; - }, [isTransitioning, duration, onProgress]); + }, [hasCurrentSong, isTransitioning, onProgress]); const { mediaAutoNext } = usePlayerActions(); diff --git a/src/renderer/features/player/audio-player/mpv-player.tsx b/src/renderer/features/player/audio-player/mpv-player.tsx index a578ce657..362ec406a 100644 --- a/src/renderer/features/player/audio-player/mpv-player.tsx +++ b/src/renderer/features/player/audio-player/mpv-player.tsx @@ -23,7 +23,7 @@ const mpvPlayer = isElectron() ? window.api.mpvPlayer : null; export function MpvPlayer() { const playerRef = useRef(null); - const { status } = usePlayerData(); + const { currentSong, status } = usePlayerData(); const { mediaAutoNext, setTimestamp } = usePlayerActions(); const { speed } = usePlayerProperties(); const isMuted = usePlayerMuted(); @@ -147,8 +147,10 @@ export function MpvPlayer() { }; }, []); + const hasCurrentSong = !!currentSong?.id; + useEffect(() => { - if (localPlayerStatus !== PlayerStatus.PLAYING) { + if (localPlayerStatus !== PlayerStatus.PLAYING || !hasCurrentSong) { return; } @@ -168,7 +170,7 @@ export function MpvPlayer() { }, 500); return () => clearInterval(interval); - }, [localPlayerStatus, setTimestamp]); + }, [hasCurrentSong, localPlayerStatus, setTimestamp]); return (