Clean up mpv startup
This commit is contained in:
parent
35f9798bed
commit
6a01d44600
3 changed files with 34 additions and 18 deletions
|
@ -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();
|
|
||||||
});
|
|
||||||
|
|
|
@ -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 = () => {
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
Reference in a new issue