Files
youtube-music/src/preload.ts
2023-12-01 01:30:46 +09:00

58 lines
2.0 KiB
TypeScript

import process from 'node:process';
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
import is from 'electron-is';
import config from './config';
import {
forceLoadPreloadPlugin,
forceUnloadPreloadPlugin,
loadAllPreloadPlugins,
} from './loader/preload';
import { loadI18n, setLanguage } from '@/i18n';
loadI18n().then(async () => {
await setLanguage(config.get('options.language') ?? 'en');
loadAllPreloadPlugins();
});
ipcRenderer.on('plugin:unload', async (_, id: string) => {
await forceUnloadPreloadPlugin(id);
});
ipcRenderer.on('plugin:enable', async (_, id: string) => {
await forceLoadPreloadPlugin(id);
});
contextBridge.exposeInMainWorld('mainConfig', config);
contextBridge.exposeInMainWorld('electronIs', is);
contextBridge.exposeInMainWorld('ipcRenderer', {
on: (
channel: string,
listener: (event: IpcRendererEvent, ...args: unknown[]) => void,
) => ipcRenderer.on(channel, listener),
off: (channel: string, listener: (...args: unknown[]) => void) =>
ipcRenderer.off(channel, listener),
once: (
channel: string,
listener: (event: IpcRendererEvent, ...args: unknown[]) => void,
) => ipcRenderer.once(channel, listener),
send: (channel: string, ...args: unknown[]) =>
ipcRenderer.send(channel, ...args),
removeListener: (channel: string, listener: (...args: unknown[]) => void) =>
ipcRenderer.removeListener(channel, listener),
removeAllListeners: (channel: string) =>
ipcRenderer.removeAllListeners(channel),
invoke: async (channel: string, ...args: unknown[]): Promise<unknown> =>
ipcRenderer.invoke(channel, ...args),
sendSync: (channel: string, ...args: unknown[]): unknown =>
ipcRenderer.sendSync(channel, ...args),
sendToHost: (channel: string, ...args: unknown[]) =>
ipcRenderer.sendToHost(channel, ...args),
});
contextBridge.exposeInMainWorld('reload', () => ipcRenderer.send('reload'));
contextBridge.exposeInMainWorld(
'ELECTRON_RENDERER_URL',
process.env.ELECTRON_RENDERER_URL,
);