Clean up mpv startup

This commit is contained in:
jeffvli 2023-05-20 19:56:17 -07:00
parent 35f9798bed
commit 6a01d44600
3 changed files with 34 additions and 18 deletions

View file

@ -117,7 +117,3 @@ ipcMain.on('player-volume', async (_event, value: number) => {
ipcMain.on('player-mute', async () => { ipcMain.on('player-mute', async () => {
await getMpvInstance()?.mute(); await getMpvInstance()?.mute();
}); });
ipcMain.on('player-quit', async () => {
await getMpvInstance()?.stop();
});

View file

@ -342,15 +342,20 @@ const createMpv = (data: { extraParameters?: string[]; properties?: Record<strin
params, params,
); );
console.log('Setting mpv properties: ', properties); console.log('Setting MPV properties: ', properties);
mpvInstance.setMultipleProperties(properties || {}); mpvInstance.setMultipleProperties(properties || {});
mpvInstance.start().catch((error) => { mpvInstance.start().catch((error) => {
console.log('error starting mpv', error); console.log('MPV Event: start error', error);
}); });
mpvInstance.on('status', (status) => { mpvInstance.on('status', (status, ...rest) => {
console.log('MPV Event: status', status.property, status.value, rest);
if (status.property === 'playlist-pos') { if (status.property === 'playlist-pos') {
if (status.value === -1) {
mpvInstance?.stop();
}
if (status.value !== 0) { if (status.value !== 0) {
getMainWindow()?.webContents.send('renderer-player-auto-next'); getMainWindow()?.webContents.send('renderer-player-auto-next');
} }
@ -359,16 +364,19 @@ const createMpv = (data: { extraParameters?: string[]; properties?: Record<strin
// Automatically updates the play button when the player is playing // Automatically updates the play button when the player is playing
mpvInstance.on('resumed', () => { mpvInstance.on('resumed', () => {
console.log('MPV Event: resumed');
getMainWindow()?.webContents.send('renderer-player-play'); getMainWindow()?.webContents.send('renderer-player-play');
}); });
// Automatically updates the play button when the player is stopped // Automatically updates the play button when the player is stopped
mpvInstance.on('stopped', () => { mpvInstance.on('stopped', () => {
console.log('MPV Event: stopped');
getMainWindow()?.webContents.send('renderer-player-stop'); getMainWindow()?.webContents.send('renderer-player-stop');
}); });
// Automatically updates the play button when the player is paused // Automatically updates the play button when the player is paused
mpvInstance.on('paused', () => { mpvInstance.on('paused', () => {
console.log('MPV Event: paused');
getMainWindow()?.webContents.send('renderer-player-pause'); getMainWindow()?.webContents.send('renderer-player-pause');
}); });
@ -376,6 +384,10 @@ const createMpv = (data: { extraParameters?: string[]; properties?: Record<strin
mpvInstance.on('timeposition', (time: number) => { mpvInstance.on('timeposition', (time: number) => {
getMainWindow()?.webContents.send('renderer-player-current-time', time); getMainWindow()?.webContents.send('renderer-player-current-time', time);
}); });
mpvInstance.on('quit', () => {
console.log('MPV Event: quit');
});
}; };
export const getMpvInstance = () => { export const getMpvInstance = () => {

View file

@ -8,7 +8,7 @@ import { initSimpleImg } from 'react-simple-img';
import { BaseContextModal } from './components'; import { BaseContextModal } from './components';
import { useTheme } from './hooks'; import { useTheme } from './hooks';
import { AppRouter } from './router/app-router'; import { AppRouter } from './router/app-router';
import { useHotkeySettings, useSettingsStore } from './store/settings.store'; import { useHotkeySettings, usePlaybackSettings, useSettingsStore } from './store/settings.store';
import './styles/global.scss'; import './styles/global.scss';
import '@ag-grid-community/styles/ag-grid.css'; import '@ag-grid-community/styles/ag-grid.css';
import { ContextMenuProvider } from '/@/renderer/features/context-menu'; import { ContextMenuProvider } from '/@/renderer/features/context-menu';
@ -18,6 +18,7 @@ import { AddToPlaylistContextModal } from '/@/renderer/features/playlists';
import isElectron from 'is-electron'; import isElectron from 'is-electron';
import { getMpvProperties } from '/@/renderer/features/settings/components/playback/mpv-settings'; import { getMpvProperties } from '/@/renderer/features/settings/components/playback/mpv-settings';
import { usePlayerStore } from '/@/renderer/store'; import { usePlayerStore } from '/@/renderer/store';
import { PlaybackType } from '/@/renderer/types';
ModuleRegistry.registerModules([ClientSideRowModelModule, InfiniteRowModelModule]); ModuleRegistry.registerModules([ClientSideRowModelModule, InfiniteRowModelModule]);
@ -29,6 +30,7 @@ const ipc = isElectron() ? window.electron.ipc : null;
export const App = () => { export const App = () => {
const theme = useTheme(); const theme = useTheme();
const contentFont = useSettingsStore((state) => state.general.fontContent); const contentFont = useSettingsStore((state) => state.general.fontContent);
const { type: playbackType } = usePlaybackSettings();
const { bindings } = useHotkeySettings(); const { bindings } = useHotkeySettings();
const handlePlayQueueAdd = useHandlePlayQueueAdd(); const handlePlayQueueAdd = useHandlePlayQueueAdd();
@ -39,17 +41,23 @@ export const App = () => {
// Start the mpv instance on startup // Start the mpv instance on startup
useEffect(() => { useEffect(() => {
const extraParameters = useSettingsStore.getState().playback.mpvExtraParameters; if (isElectron() && playbackType === PlaybackType.LOCAL) {
const properties = { const extraParameters = useSettingsStore.getState().playback.mpvExtraParameters;
...getMpvProperties(useSettingsStore.getState().playback.mpvProperties), const properties = {
volume: usePlayerStore.getState().volume || 50, ...getMpvProperties(useSettingsStore.getState().playback.mpvProperties),
}; volume: usePlayerStore.getState().volume || 50,
};
mpvPlayer?.initialize({ mpvPlayer?.initialize({
extraParameters, extraParameters,
properties, properties,
}); });
}, []); }
return () => {
mpvPlayer?.quit();
};
}, [playbackType]);
useEffect(() => { useEffect(() => {
if (isElectron()) { if (isElectron()) {