readd mpv reload handler

This commit is contained in:
jeffvli
2026-01-04 01:01:01 -08:00
parent 5f1867c14f
commit 0596faf51e
3 changed files with 27 additions and 16 deletions
+3
View File
@@ -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<string, never>;
export type PlayerPlayEventPayload = {
id: string;
index: number;
@@ -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(() => {
@@ -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<string, any> = {
// 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(() => {
<Group gap="sm">
<ActionIcon
icon="refresh"
// onClick={handleReloadMpv}
onClick={handleReloadMpv}
tooltip={{
label: t('common.reload', { postProcess: 'titleCase' }),
openDelay: 0,