From 0596faf51ebf0768e79e2b8f7d2181667813967d Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 4 Jan 2026 01:01:01 -0800 Subject: [PATCH] readd mpv reload handler --- src/renderer/events/events.ts | 3 +++ .../audio-player/engine/mpv-player-engine.tsx | 17 +++++++++++++- .../components/playback/mpv-settings.tsx | 23 +++++++------------ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/renderer/events/events.ts b/src/renderer/events/events.ts index 45b7f9a58..6879595f0 100644 --- a/src/renderer/events/events.ts +++ b/src/renderer/events/events.ts @@ -10,6 +10,7 @@ export type EventMap = { ITEM_LIST_UPDATE_ITEM: ItemListUpdateItemEventPayload; MEDIA_NEXT: MediaNextEventPayload; MEDIA_PREV: MediaPrevEventPayload; + MPV_RELOAD: MpvReloadEventPayload; PLAYER_PLAY: PlayerPlayEventPayload; PLAYER_REPEATED: PlayerRepeatedEventPayload; PLAYLIST_MOVE_DOWN: PlaylistMoveEventPayload; @@ -42,6 +43,8 @@ export type MediaPrevEventPayload = { prevIndex: number; }; +export type MpvReloadEventPayload = Record; + export type PlayerPlayEventPayload = { id: string; index: number; 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 71a080bbf..dfc7c21ef 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 @@ -3,6 +3,7 @@ import type { RefObject } from 'react'; import isElectron from 'is-electron'; import { useEffect, useImperativeHandle, useRef, useState } from 'react'; +import { eventEmitter } from '/@/renderer/events/event-emitter'; import { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events'; import { getSongUrl } from '/@/renderer/features/player/audio-player/hooks/use-stream-url'; import { AudioPlayer, PlayerOnProgressProps } from '/@/renderer/features/player/audio-player/types'; @@ -58,6 +59,19 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { const { transcode } = usePlaybackSettings(); const mpvExtraParameters = useSettingsStore((store) => store.playback.mpvExtraParameters); const mpvProperties = useSettingsStore((store) => store.playback.mpvProperties); + const [reloadTrigger, setReloadTrigger] = useState(0); + + useEffect(() => { + const handleMpvReload = () => { + setReloadTrigger((prev) => prev + 1); + }; + + eventEmitter.on('MPV_RELOAD', handleMpvReload); + + return () => { + eventEmitter.off('MPV_RELOAD', handleMpvReload); + }; + }, []); // Start the mpv instance on startup useEffect(() => { @@ -132,8 +146,9 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => { // Volume and speed changes are handled by separate useEffects below to avoid // reinitializing the entire player. Transcode changes are handled by queue // update callbacks in usePlayerEvents. + // reloadTrigger is included to allow manual reload via MPV_RELOAD event. // eslint-disable-next-line react-hooks/exhaustive-deps - }, [mpvExtraParameters, mpvProperties]); + }, [mpvExtraParameters, mpvProperties, reloadTrigger]); // Update volume useEffect(() => { diff --git a/src/renderer/features/settings/components/playback/mpv-settings.tsx b/src/renderer/features/settings/components/playback/mpv-settings.tsx index d4426e0c7..6f1589255 100644 --- a/src/renderer/features/settings/components/playback/mpv-settings.tsx +++ b/src/renderer/features/settings/components/playback/mpv-settings.tsx @@ -2,6 +2,8 @@ import isElectron from 'is-electron'; import { memo, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { eventEmitter } from '/@/renderer/events/event-emitter'; +import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { SettingOption, SettingsSection, @@ -125,21 +127,12 @@ export const MpvSettings = memo(() => { mpvPlayer?.setProperties(mpvSetting); }; - // const handleReloadMpv = () => { - // pause(); - // clearQueue(); + const player = usePlayer(); - // const extraParameters = useSettingsStore.getState().playback.mpvExtraParameters; - // const properties: Record = { - // speed: usePlayerStore.getState().speed, - // ...getMpvProperties(useSettingsStore.getState().playback.mpvProperties), - // }; - // mpvPlayer?.restart({ - // binaryPath: mpvPath || undefined, - // extraParameters, - // properties, - // }); - // }; + const handleReloadMpv = () => { + player.mediaStop(); + eventEmitter.emit('MPV_RELOAD', {}); + }; const handleSetExtraParameters = (data: string[]) => { setSettings({ @@ -155,7 +148,7 @@ export const MpvSettings = memo(() => {