[enhancement]: Support disabling MPV entirely

Supports running Feishin solely using web audio (useful for clients with problems with MPV).
Also moves save/restore queue to utils, as MPV object is now optional
This commit is contained in:
Kendall Garner 2024-02-11 13:56:29 -08:00
parent ae8fc6df13
commit f82da2e76b
No known key found for this signature in database
GPG key ID: 18D2767419676C87
10 changed files with 127 additions and 74 deletions

View file

@ -316,7 +316,7 @@ const createWindow = async () => {
}
const queue = JSON.parse(data.toString());
getMainWindow()?.webContents.send('renderer-player-restore-queue', queue);
getMainWindow()?.webContents.send('renderer-restore-queue', queue);
});
});
});
@ -362,7 +362,7 @@ const createWindow = async () => {
event.preventDefault();
saved = true;
getMainWindow()?.webContents.send('renderer-player-save-queue');
getMainWindow()?.webContents.send('renderer-save-queue');
ipcMain.once('player-save-queue', async (_event, data: Record<string, any>) => {
const queueLocation = join(app.getPath('userData'), 'queue');

View file

@ -9,6 +9,8 @@ import { mpvPlayer, mpvPlayerListener } from './preload/mpv-player';
import { remote } from './preload/remote';
import { utils } from './preload/utils';
const disableMpv = localSettings.get('disable_mpv');
contextBridge.exposeInMainWorld('electron', {
browser,
discordRpc,
@ -16,8 +18,8 @@ contextBridge.exposeInMainWorld('electron', {
localSettings,
lyrics,
mpris,
mpvPlayer,
mpvPlayerListener,
mpvPlayer: disableMpv ? undefined : mpvPlayer,
mpvPlayerListener: disableMpv ? undefined : mpvPlayerListener,
remote,
utils,
});

View file

@ -1,5 +1,5 @@
import { ipcRenderer, IpcRendererEvent } from 'electron';
import { PlayerData, PlayerState } from '/@/renderer/store';
import { PlayerData } from '/@/renderer/store';
const initialize = (data: { extraParameters?: string[]; properties?: Record<string, any> }) => {
return ipcRenderer.invoke('player-initialize', data);
@ -50,14 +50,6 @@ const previous = () => {
ipcRenderer.send('player-previous');
};
const restoreQueue = () => {
ipcRenderer.send('player-restore-queue');
};
const saveQueue = (data: Record<string, any>) => {
ipcRenderer.send('player-save-queue', data);
};
const seek = (seconds: number) => {
ipcRenderer.send('player-seek', seconds);
};
@ -154,16 +146,6 @@ const rendererQuit = (cb: (event: IpcRendererEvent) => void) => {
ipcRenderer.on('renderer-player-quit', cb);
};
const rendererSaveQueue = (cb: (event: IpcRendererEvent) => void) => {
ipcRenderer.on('renderer-player-save-queue', cb);
};
const rendererRestoreQueue = (
cb: (event: IpcRendererEvent, data: Partial<PlayerState>) => void,
) => {
ipcRenderer.on('renderer-player-restore-queue', cb);
};
const rendererError = (cb: (event: IpcRendererEvent, data: string) => void) => {
ipcRenderer.on('renderer-player-error', cb);
};
@ -182,8 +164,6 @@ export const mpvPlayer = {
previous,
quit,
restart,
restoreQueue,
saveQueue,
seek,
seekTo,
setProperties,
@ -203,8 +183,6 @@ export const mpvPlayerListener = {
rendererPlayPause,
rendererPrevious,
rendererQuit,
rendererRestoreQueue,
rendererSaveQueue,
rendererSkipBackward,
rendererSkipForward,
rendererStop,

View file

@ -1,9 +1,31 @@
import { IpcRendererEvent, ipcRenderer } from 'electron';
import { isMacOS, isWindows, isLinux } from '../utils';
import { PlayerState } from '/@/renderer/store';
const saveQueue = (data: Record<string, any>) => {
ipcRenderer.send('player-save-queue', data);
};
const restoreQueue = () => {
ipcRenderer.send('player-restore-queue');
};
const onSaveQueue = (cb: (event: IpcRendererEvent) => void) => {
ipcRenderer.on('renderer-save-queue', cb);
};
const onRestoreQueue = (cb: (event: IpcRendererEvent, data: Partial<PlayerState>) => void) => {
ipcRenderer.on('renderer-restore-queue', cb);
};
export const utils = {
isLinux,
isMacOS,
isWindows,
onRestoreQueue,
onSaveQueue,
restoreQueue,
saveQueue,
};
export type Utils = typeof utils;