mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
Force quit mpv on app close (#4)
This commit is contained in:
@@ -44,7 +44,7 @@ const mpv = new MpvAPI(
|
|||||||
);
|
);
|
||||||
|
|
||||||
mpv.start().catch((error) => {
|
mpv.start().catch((error) => {
|
||||||
console.log('error', error);
|
console.log('error starting mpv', error);
|
||||||
});
|
});
|
||||||
|
|
||||||
mpv.on('status', (status) => {
|
mpv.on('status', (status) => {
|
||||||
@@ -152,10 +152,14 @@ ipcMain.on('player-auto-next', async (_event, data: PlayerData) => {
|
|||||||
|
|
||||||
// Sets the volume to the given value (0-100)
|
// Sets the volume to the given value (0-100)
|
||||||
ipcMain.on('player-volume', async (_event, value: number) => {
|
ipcMain.on('player-volume', async (_event, value: number) => {
|
||||||
mpv.volume(value);
|
await mpv.volume(value);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Toggles the mute status
|
// Toggles the mute status
|
||||||
ipcMain.on('player-mute', async () => {
|
ipcMain.on('player-mute', async () => {
|
||||||
mpv.mute();
|
await mpv.mute();
|
||||||
|
});
|
||||||
|
|
||||||
|
ipcMain.on('player-quit', async () => {
|
||||||
|
await mpv.quit();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -165,6 +165,10 @@ export const getMainWindow = () => {
|
|||||||
return mainWindow;
|
return mainWindow;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
app.on('before-quit', () => {
|
||||||
|
mainWindow?.webContents.send('renderer-player-quit');
|
||||||
|
});
|
||||||
|
|
||||||
app.on('window-all-closed', () => {
|
app.on('window-all-closed', () => {
|
||||||
// Respect the OSX convention of having the application in memory even
|
// Respect the OSX convention of having the application in memory even
|
||||||
// after all windows have been closed
|
// after all windows have been closed
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ const volume = (value: number) => {
|
|||||||
ipcRenderer.send('player-volume', value);
|
ipcRenderer.send('player-volume', value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const quit = () => {
|
||||||
|
ipcRenderer.send('player-quit');
|
||||||
|
};
|
||||||
|
|
||||||
const rendererAutoNext = (cb: (event: IpcRendererEvent, data: PlayerData) => void) => {
|
const rendererAutoNext = (cb: (event: IpcRendererEvent, data: PlayerData) => void) => {
|
||||||
ipcRenderer.on('renderer-player-auto-next', cb);
|
ipcRenderer.on('renderer-player-auto-next', cb);
|
||||||
};
|
};
|
||||||
@@ -74,6 +78,10 @@ const rendererStop = (cb: (event: IpcRendererEvent, data: PlayerData) => void) =
|
|||||||
ipcRenderer.on('renderer-player-stop', cb);
|
ipcRenderer.on('renderer-player-stop', cb);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const rendererQuit = (cb: (event: IpcRendererEvent) => void) => {
|
||||||
|
ipcRenderer.on('renderer-player-quit', cb);
|
||||||
|
};
|
||||||
|
|
||||||
export const mpvPlayer = {
|
export const mpvPlayer = {
|
||||||
autoNext,
|
autoNext,
|
||||||
currentTime,
|
currentTime,
|
||||||
@@ -82,6 +90,7 @@ export const mpvPlayer = {
|
|||||||
pause,
|
pause,
|
||||||
play,
|
play,
|
||||||
previous,
|
previous,
|
||||||
|
quit,
|
||||||
seek,
|
seek,
|
||||||
seekTo,
|
seekTo,
|
||||||
setQueue,
|
setQueue,
|
||||||
@@ -98,5 +107,6 @@ export const mpvPlayerListener = {
|
|||||||
rendererPlay,
|
rendererPlay,
|
||||||
rendererPlayPause,
|
rendererPlayPause,
|
||||||
rendererPrevious,
|
rendererPrevious,
|
||||||
|
rendererQuit,
|
||||||
rendererStop,
|
rendererStop,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import {
|
|||||||
} from '/@/renderer/store';
|
} from '/@/renderer/store';
|
||||||
import { useSettingsStore } from '/@/renderer/store/settings.store';
|
import { useSettingsStore } from '/@/renderer/store/settings.store';
|
||||||
|
|
||||||
const mpvPlayer = window.electron.mpvPlayer;
|
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
|
||||||
const mpvPlayerListener = window.electron.mpvPlayerListener;
|
const mpvPlayerListener = isElectron() ? window.electron.mpvPlayerListener : null;
|
||||||
const ipc = window.electron.ipc;
|
const ipc = isElectron() ? window.electron.ipc : null;
|
||||||
|
|
||||||
export const useCenterControls = (args: { playersRef: any }) => {
|
export const useCenterControls = (args: { playersRef: any }) => {
|
||||||
const { playersRef } = args;
|
const { playersRef } = args;
|
||||||
@@ -447,6 +447,10 @@ export const useCenterControls = (args: { playersRef: any }) => {
|
|||||||
[currentPlayerRef, isMpvPlayer, setCurrentTime],
|
[currentPlayerRef, isMpvPlayer, setCurrentTime],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleQuit = useCallback(() => {
|
||||||
|
mpvPlayer.quit();
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isElectron()) {
|
if (isElectron()) {
|
||||||
mpvPlayerListener.rendererPlayPause(() => {
|
mpvPlayerListener.rendererPlayPause(() => {
|
||||||
@@ -480,6 +484,10 @@ export const useCenterControls = (args: { playersRef: any }) => {
|
|||||||
mpvPlayerListener.rendererAutoNext(() => {
|
mpvPlayerListener.rendererAutoNext(() => {
|
||||||
handleAutoNext();
|
handleAutoNext();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mpvPlayerListener.rendererQuit(() => {
|
||||||
|
handleQuit();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
@@ -491,6 +499,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
|
|||||||
ipc?.removeAllListeners('renderer-player-stop');
|
ipc?.removeAllListeners('renderer-player-stop');
|
||||||
ipc?.removeAllListeners('renderer-player-current-time');
|
ipc?.removeAllListeners('renderer-player-current-time');
|
||||||
ipc?.removeAllListeners('renderer-player-auto-next');
|
ipc?.removeAllListeners('renderer-player-auto-next');
|
||||||
|
ipc?.removeAllListeners('renderer-player-quit');
|
||||||
};
|
};
|
||||||
}, [
|
}, [
|
||||||
autoNext,
|
autoNext,
|
||||||
@@ -500,6 +509,7 @@ export const useCenterControls = (args: { playersRef: any }) => {
|
|||||||
handlePlay,
|
handlePlay,
|
||||||
handlePlayPause,
|
handlePlayPause,
|
||||||
handlePrevTrack,
|
handlePrevTrack,
|
||||||
|
handleQuit,
|
||||||
handleStop,
|
handleStop,
|
||||||
isMpvPlayer,
|
isMpvPlayer,
|
||||||
next,
|
next,
|
||||||
|
|||||||
Reference in New Issue
Block a user