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,
loadAllMainPlugins,
} from '@/loader/main';
import { PluginBaseConfig } from '@/plugins/utils/builder';
import {PluginConfig, PluginDef} from "@/types/plugins";
// Catch errors and log them
unhandled({
@ -113,11 +113,11 @@ ipcMain.handle('get-main-plugin-names', () => Object.keys(mainPlugins));
const initHook = (win: BrowserWindow) => {
ipcMain.handle(
'get-config',
(_, id: keyof PluginBuilderList) =>
(_, id: string) =>
deepmerge(
mainPlugins[id].config,
config.get(`plugins.${id}`) ?? {},
) as PluginBuilderList[typeof id]['config'],
) as PluginConfig,
);
ipcMain.handle('set-config', (_, name: string, obj: object) =>
config.setPartial(`plugins.${name}`, obj),
@ -137,11 +137,11 @@ const initHook = (win: BrowserWindow) => {
const isEqual = deepEqual(oldPluginConfigList[id], newPluginConfig);
if (!isEqual) {
const oldConfig = oldPluginConfigList[id] as PluginBaseConfig;
const oldConfig = oldPluginConfigList[id] as PluginConfig;
const config = deepmerge(
mainPlugins[id].config,
newPluginConfig,
) as PluginBaseConfig;
) as PluginConfig;
if (config.enabled !== oldConfig?.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 (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 { setApplicationMenu } from '@/menu';
import type { PluginConfig } from '@/types/plugins';
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),
setConfig: (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 {
const plugin = allPlugins[id];
if (!plugin) return;
const menu = plugin.menu?.(createContext(id, win));
if (menu) menuTemplateMap[id] = menu;
if (menu) menuTemplateMap[id] = await menu;
else return;
console.log('[YTMusic]', `Successfully loaded '${id}::menu'`);
@ -42,7 +44,7 @@ export const loadAllMenuPlugins = (win: BrowserWindow) => {
const pluginConfigs = config.plugins.getPlugins();
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) {
forceLoadMenuPlugin(pluginId, win);

View File

@ -1,14 +1,14 @@
import { deepmerge } from 'deepmerge-ts';
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 { startPlugin, stopPlugin } from '@/utils';
import config from '@/config';
const loadedPluginMap: Record<string, PluginDef> = {};
const createContext = (id: string): PreloadContext => ({
const loadedPluginMap: Record<string, PluginDef<unknown, unknown, unknown>> = {};
const createContext = (id: string): PreloadContext<PluginConfig> => ({
getConfig: () => config.plugins.getOptions(id),
setConfig: (newConfig) => {
config.setPartial(`plugins.${id}`, newConfig);
@ -52,7 +52,7 @@ export const loadAllPreloadPlugins = () => {
const pluginConfigs = config.plugins.getPlugins();
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) {
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];
};

View File

@ -8,7 +8,7 @@ import { PluginConfig, PluginDef } from '@/types/plugins';
import { startPlugin, stopPlugin } from '@/utils';
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> => ({
getConfig: () => window.mainConfig.plugins.getOptions(id),
@ -77,7 +77,7 @@ export const loadAllRendererPlugins = () => {
const pluginConfigs = window.mainConfig.plugins.getPlugins();
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) {
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];
};

View File

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