fix: fix onConfigChange

This commit is contained in:
JellyBrick
2023-11-27 00:44:46 +09:00
parent 563d431c00
commit e55a1d3076
5 changed files with 26 additions and 26 deletions

View File

@ -47,7 +47,7 @@ import {
getAllLoadedMainPlugins, getAllLoadedMainPlugins,
loadAllMainPlugins, loadAllMainPlugins,
} from '@/loader/main'; } from '@/loader/main';
import { PluginBaseConfig } from '@/plugins/utils/builder'; import {PluginConfig, PluginDef} from "@/types/plugins";
// Catch errors and log them // Catch errors and log them
unhandled({ unhandled({
@ -113,11 +113,11 @@ ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins));
const initHook = (win: BrowserWindow) => { const initHook = (win: BrowserWindow) => {
ipcMain.handle( ipcMain.handle(
'get-config', 'get-config',
(_, id: keyof PluginBuilderList) => (_, id: string) =>
deepmerge( deepmerge(
mainPlugins[id].config, mainPlugins[id].config,
config.get(`plugins.${id}`) ?? {}, config.get(`plugins.${id}`) ?? {},
) as PluginBuilderList[typeof id]['config'], ) as PluginConfig,
); );
ipcMain.handle('set-config', (_, name: string, obj: object) => ipcMain.handle('set-config', (_, name: string, obj: object) =>
config.setPartial(`plugins.${name}`, obj), config.setPartial(`plugins.${name}`, obj),
@ -137,11 +137,11 @@ const initHook = (win: BrowserWindow) => {
const isEqual = deepEqual(oldPluginConfigList[id], newPluginConfig); const isEqual = deepEqual(oldPluginConfigList[id], newPluginConfig);
if (!isEqual) { if (!isEqual) {
const oldConfig = oldPluginConfigList[id] as PluginBaseConfig; const oldConfig = oldPluginConfigList[id] as PluginConfig;
const config = deepmerge( const config = deepmerge(
mainPlugins[id].config, mainPlugins[id].config,
newPluginConfig, newPluginConfig,
) as PluginBaseConfig; ) as PluginConfig;
if (config.enabled !== oldConfig?.enabled) { if (config.enabled !== oldConfig?.enabled) {
if (config.enabled) { if (config.enabled) {
@ -159,9 +159,10 @@ const initHook = (win: BrowserWindow) => {
} }
} }
const mainPlugin = getAllLoadedMainPlugins()[id]; const mainPlugin = getAllLoadedMainPlugins()[id] as PluginDef<unknown, unknown, unknown>;
if (mainPlugin) { if (mainPlugin) {
if (config.enabled) { if (config.enabled && typeof mainPlugin.backend !== 'function') {
mainPlugin.backend?.onConfigChange?.(config);
} }
} }

View File

@ -7,8 +7,10 @@ import { MenuContext } from '@/types/contexts';
import config from '@/config'; import config from '@/config';
import { setApplicationMenu } from '@/menu'; import { setApplicationMenu } from '@/menu';
import type { PluginConfig } from '@/types/plugins';
const menuTemplateMap: Record<string, MenuItemConstructorOptions[]> = {}; const menuTemplateMap: Record<string, MenuItemConstructorOptions[]> = {};
const createContext = (id: string, win: BrowserWindow): MenuContext => ({ const createContext = (id: string, win: BrowserWindow): MenuContext<PluginConfig> => ({
getConfig: () => config.plugins.getOptions(id), getConfig: () => config.plugins.getOptions(id),
setConfig: (newConfig) => { setConfig: (newConfig) => {
config.setPartial(`plugins.${id}`, newConfig); config.setPartial(`plugins.${id}`, newConfig);
@ -23,13 +25,13 @@ const createContext = (id: string, win: BrowserWindow): MenuContext => ({
}, },
}); });
export const forceLoadMenuPlugin = (id: string, win: BrowserWindow) => { export const forceLoadMenuPlugin = async (id: string, win: BrowserWindow) => {
try { try {
const plugin = allPlugins[id]; const plugin = allPlugins[id];
if (!plugin) return; if (!plugin) return;
const menu = plugin.menu?.(createContext(id, win)); const menu = plugin.menu?.(createContext(id, win));
if (menu) menuTemplateMap[id] = menu; if (menu) menuTemplateMap[id] = await menu;
else return; else return;
console.log('[YTMusic]', `Successfully loaded '${id}::menu'`); console.log('[YTMusic]', `Successfully loaded '${id}::menu'`);
@ -42,7 +44,7 @@ export const loadAllMenuPlugins = (win: BrowserWindow) => {
const pluginConfigs = config.plugins.getPlugins(); const pluginConfigs = config.plugins.getPlugins();
for (const [pluginId, pluginDef] of Object.entries(allPlugins)) { for (const [pluginId, pluginDef] of Object.entries(allPlugins)) {
const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}); const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}) as PluginConfig;
if (config.enabled) { if (config.enabled) {
forceLoadMenuPlugin(pluginId, win); forceLoadMenuPlugin(pluginId, win);

View File

@ -1,14 +1,14 @@
import { deepmerge } from 'deepmerge-ts'; import { deepmerge } from 'deepmerge-ts';
import { preloadPlugins } from 'virtual:plugins'; import { preloadPlugins } from 'virtual:plugins';
import { type PluginDef } from '@/types/plugins'; import type { PluginConfig, PluginDef } from '@/types/plugins';
import { type PreloadContext } from '@/types/contexts'; import { type PreloadContext } from '@/types/contexts';
import { startPlugin, stopPlugin } from '@/utils'; import { startPlugin, stopPlugin } from '@/utils';
import config from '@/config'; import config from '@/config';
const loadedPluginMap: Record<string, PluginDef> = {}; const loadedPluginMap: Record<string, PluginDef<unknown, unknown, unknown>> = {};
const createContext = (id: string): PreloadContext => ({ const createContext = (id: string): PreloadContext<PluginConfig> => ({
getConfig: () => config.plugins.getOptions(id), getConfig: () => config.plugins.getOptions(id),
setConfig: (newConfig) => { setConfig: (newConfig) => {
config.setPartial(`plugins.${id}`, newConfig); config.setPartial(`plugins.${id}`, newConfig);
@ -52,7 +52,7 @@ export const loadAllPreloadPlugins = () => {
const pluginConfigs = config.plugins.getPlugins(); const pluginConfigs = config.plugins.getPlugins();
for (const [pluginId, pluginDef] of Object.entries(preloadPlugins)) { for (const [pluginId, pluginDef] of Object.entries(preloadPlugins)) {
const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}); const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}) as PluginConfig;
if (config.enabled) { if (config.enabled) {
forceLoadPreloadPlugin(pluginId); forceLoadPreloadPlugin(pluginId);
@ -70,7 +70,7 @@ export const unloadAllPreloadPlugins = () => {
} }
}; };
export const getLoadedPreloadPlugin = (id: string): PluginDef | undefined => { export const getLoadedPreloadPlugin = (id: string): PluginDef<unknown, unknown, unknown> | undefined => {
return loadedPluginMap[id]; return loadedPluginMap[id];
}; };

View File

@ -8,7 +8,7 @@ import { PluginConfig, PluginDef } from '@/types/plugins';
import { startPlugin, stopPlugin } from '@/utils'; import { startPlugin, stopPlugin } from '@/utils';
const unregisterStyleMap: Record<string, (() => void)[]> = {}; const unregisterStyleMap: Record<string, (() => void)[]> = {};
const loadedPluginMap: Record<string, PluginDef<unknown, unknown, unknown, PluginConfig>> = {}; const loadedPluginMap: Record<string, PluginDef<unknown, unknown, unknown>> = {};
const createContext = <Config extends PluginConfig>(id: string): RendererContext<Config> => ({ const createContext = <Config extends PluginConfig>(id: string): RendererContext<Config> => ({
getConfig: () => window.mainConfig.plugins.getOptions(id), getConfig: () => window.mainConfig.plugins.getOptions(id),
@ -77,7 +77,7 @@ export const loadAllRendererPlugins = () => {
const pluginConfigs = window.mainConfig.plugins.getPlugins(); const pluginConfigs = window.mainConfig.plugins.getPlugins();
for (const [pluginId, pluginDef] of Object.entries(rendererPlugins)) { for (const [pluginId, pluginDef] of Object.entries(rendererPlugins)) {
const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}); const config = deepmerge(pluginDef.config, pluginConfigs[pluginId] ?? {}) as PluginConfig;
if (config.enabled) { if (config.enabled) {
forceLoadRendererPlugin(pluginId); forceLoadRendererPlugin(pluginId);
@ -95,7 +95,7 @@ export const unloadAllRendererPlugins = () => {
} }
}; };
export const getLoadedRendererPlugin = (id: string): PluginDef | undefined => { export const getLoadedRendererPlugin = (id: string): PluginDef<unknown, unknown, unknown> | undefined => {
return loadedPluginMap[id]; return loadedPluginMap[id];
}; };

View File

@ -1,7 +1,3 @@
import {
PluginBaseConfig,
} from '@/plugins/utils/builder';
import { startingPages } from './providers/extracted-data'; import { startingPages } from './providers/extracted-data';
import setupSongInfo from './providers/song-info-front'; import setupSongInfo from './providers/song-info-front';
import { import {
@ -12,6 +8,7 @@ import {
loadAllRendererPlugins, loadAllRendererPlugins,
} from './loader/renderer'; } from './loader/renderer';
import type { PluginConfig } from '@/types/plugins';
import type { YoutubePlayer } from '@/types/youtube-player'; import type { YoutubePlayer } from '@/types/youtube-player';
let api: (Element & YoutubePlayer) | null = null; let api: (Element & YoutubePlayer) | null = null;
@ -126,13 +123,13 @@ function onApiLoaded() {
window.ipcRenderer.on( window.ipcRenderer.on(
'plugin:unload', 'plugin:unload',
(_event, id: keyof PluginBuilderList) => { (_event, id: string) => {
forceUnloadRendererPlugin(id); forceUnloadRendererPlugin(id);
}, },
); );
window.ipcRenderer.on( window.ipcRenderer.on(
'plugin:enable', 'plugin:enable',
(_event, id: keyof PluginBuilderList) => { (_event, id: string) => {
forceLoadRendererPlugin(id); forceLoadRendererPlugin(id);
if (api) { if (api) {
const plugin = getLoadedRendererPlugin(id); const plugin = getLoadedRendererPlugin(id);
@ -145,7 +142,7 @@ function onApiLoaded() {
window.ipcRenderer.on( window.ipcRenderer.on(
'config-changed', 'config-changed',
(_event, id: string, newConfig: PluginBaseConfig) => { (_event, id: string, newConfig: PluginConfig) => {
const plugin = getAllLoadedRendererPlugins()[id]; const plugin = getAllLoadedRendererPlugins()[id];
if (plugin && typeof plugin.renderer !== 'function') { if (plugin && typeof plugin.renderer !== 'function') {
plugin.renderer?.onConfigChange?.(newConfig); plugin.renderer?.onConfigChange?.(newConfig);