mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
readd mpv reload handler
This commit is contained in:
@@ -10,6 +10,7 @@ export type EventMap = {
|
|||||||
ITEM_LIST_UPDATE_ITEM: ItemListUpdateItemEventPayload;
|
ITEM_LIST_UPDATE_ITEM: ItemListUpdateItemEventPayload;
|
||||||
MEDIA_NEXT: MediaNextEventPayload;
|
MEDIA_NEXT: MediaNextEventPayload;
|
||||||
MEDIA_PREV: MediaPrevEventPayload;
|
MEDIA_PREV: MediaPrevEventPayload;
|
||||||
|
MPV_RELOAD: MpvReloadEventPayload;
|
||||||
PLAYER_PLAY: PlayerPlayEventPayload;
|
PLAYER_PLAY: PlayerPlayEventPayload;
|
||||||
PLAYER_REPEATED: PlayerRepeatedEventPayload;
|
PLAYER_REPEATED: PlayerRepeatedEventPayload;
|
||||||
PLAYLIST_MOVE_DOWN: PlaylistMoveEventPayload;
|
PLAYLIST_MOVE_DOWN: PlaylistMoveEventPayload;
|
||||||
@@ -42,6 +43,8 @@ export type MediaPrevEventPayload = {
|
|||||||
prevIndex: number;
|
prevIndex: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type MpvReloadEventPayload = Record<string, never>;
|
||||||
|
|
||||||
export type PlayerPlayEventPayload = {
|
export type PlayerPlayEventPayload = {
|
||||||
id: string;
|
id: string;
|
||||||
index: number;
|
index: number;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import type { RefObject } from 'react';
|
|||||||
import isElectron from 'is-electron';
|
import isElectron from 'is-electron';
|
||||||
import { useEffect, useImperativeHandle, useRef, useState } from 'react';
|
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 { usePlayerEvents } from '/@/renderer/features/player/audio-player/hooks/use-player-events';
|
||||||
import { getSongUrl } from '/@/renderer/features/player/audio-player/hooks/use-stream-url';
|
import { getSongUrl } from '/@/renderer/features/player/audio-player/hooks/use-stream-url';
|
||||||
import { AudioPlayer, PlayerOnProgressProps } from '/@/renderer/features/player/audio-player/types';
|
import { AudioPlayer, PlayerOnProgressProps } from '/@/renderer/features/player/audio-player/types';
|
||||||
@@ -58,6 +59,19 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
|
|||||||
const { transcode } = usePlaybackSettings();
|
const { transcode } = usePlaybackSettings();
|
||||||
const mpvExtraParameters = useSettingsStore((store) => store.playback.mpvExtraParameters);
|
const mpvExtraParameters = useSettingsStore((store) => store.playback.mpvExtraParameters);
|
||||||
const mpvProperties = useSettingsStore((store) => store.playback.mpvProperties);
|
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
|
// Start the mpv instance on startup
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -132,8 +146,9 @@ export const MpvPlayerEngine = (props: MpvPlayerEngineProps) => {
|
|||||||
// Volume and speed changes are handled by separate useEffects below to avoid
|
// Volume and speed changes are handled by separate useEffects below to avoid
|
||||||
// reinitializing the entire player. Transcode changes are handled by queue
|
// reinitializing the entire player. Transcode changes are handled by queue
|
||||||
// update callbacks in usePlayerEvents.
|
// update callbacks in usePlayerEvents.
|
||||||
|
// reloadTrigger is included to allow manual reload via MPV_RELOAD event.
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [mpvExtraParameters, mpvProperties]);
|
}, [mpvExtraParameters, mpvProperties, reloadTrigger]);
|
||||||
|
|
||||||
// Update volume
|
// Update volume
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import isElectron from 'is-electron';
|
|||||||
import { memo, useEffect, useState } from 'react';
|
import { memo, useEffect, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
|
import { eventEmitter } from '/@/renderer/events/event-emitter';
|
||||||
|
import { usePlayer } from '/@/renderer/features/player/context/player-context';
|
||||||
import {
|
import {
|
||||||
SettingOption,
|
SettingOption,
|
||||||
SettingsSection,
|
SettingsSection,
|
||||||
@@ -125,21 +127,12 @@ export const MpvSettings = memo(() => {
|
|||||||
mpvPlayer?.setProperties(mpvSetting);
|
mpvPlayer?.setProperties(mpvSetting);
|
||||||
};
|
};
|
||||||
|
|
||||||
// const handleReloadMpv = () => {
|
const player = usePlayer();
|
||||||
// pause();
|
|
||||||
// clearQueue();
|
|
||||||
|
|
||||||
// const extraParameters = useSettingsStore.getState().playback.mpvExtraParameters;
|
const handleReloadMpv = () => {
|
||||||
// const properties: Record<string, any> = {
|
player.mediaStop();
|
||||||
// speed: usePlayerStore.getState().speed,
|
eventEmitter.emit('MPV_RELOAD', {});
|
||||||
// ...getMpvProperties(useSettingsStore.getState().playback.mpvProperties),
|
};
|
||||||
// };
|
|
||||||
// mpvPlayer?.restart({
|
|
||||||
// binaryPath: mpvPath || undefined,
|
|
||||||
// extraParameters,
|
|
||||||
// properties,
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
|
|
||||||
const handleSetExtraParameters = (data: string[]) => {
|
const handleSetExtraParameters = (data: string[]) => {
|
||||||
setSettings({
|
setSettings({
|
||||||
@@ -155,7 +148,7 @@ export const MpvSettings = memo(() => {
|
|||||||
<Group gap="sm">
|
<Group gap="sm">
|
||||||
<ActionIcon
|
<ActionIcon
|
||||||
icon="refresh"
|
icon="refresh"
|
||||||
// onClick={handleReloadMpv}
|
onClick={handleReloadMpv}
|
||||||
tooltip={{
|
tooltip={{
|
||||||
label: t('common.reload', { postProcess: 'titleCase' }),
|
label: t('common.reload', { postProcess: 'titleCase' }),
|
||||||
openDelay: 0,
|
openDelay: 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user