Add menu customization in plugin system

This commit is contained in:
TC
2021-03-24 21:40:12 +01:00
parent 84142ab27e
commit b1089b66c3

44
menu.js
View File

@ -1,26 +1,46 @@
const { existsSync } = require("fs");
const path = require("path");
const { app, Menu } = require("electron"); const { app, Menu } = require("electron");
const is = require("electron-is"); const is = require("electron-is");
const { getAllPlugins } = require("./plugins/utils"); const { getAllPlugins } = require("./plugins/utils");
const config = require("./config"); const config = require("./config");
const pluginEnabledMenu = (plugin, label = "") => ({
label: label || plugin,
type: "checkbox",
checked: config.plugins.isEnabled(plugin),
click: (item) => {
if (item.checked) {
config.plugins.enable(plugin);
} else {
config.plugins.disable(plugin);
}
},
});
const mainMenuTemplate = (win) => [ const mainMenuTemplate = (win) => [
{ {
label: "Plugins", label: "Plugins",
submenu: [ submenu: [
...getAllPlugins().map((plugin) => { ...getAllPlugins().map((plugin) => {
return { const pluginPath = path.join(__dirname, "plugins", plugin, "menu.js");
label: plugin,
type: "checkbox", if (existsSync(pluginPath)) {
checked: config.plugins.isEnabled(plugin), const getPluginMenu = require(pluginPath);
click: (item) => { return {
if (item.checked) { label: plugin,
config.plugins.enable(plugin); submenu: [
} else { pluginEnabledMenu(plugin, "Enabled"),
config.plugins.disable(plugin); ...getPluginMenu(win, config.plugins.getOptions(plugin), () =>
} module.exports.setApplicationMenu(win)
}, ),
}; ],
};
}
return pluginEnabledMenu(plugin);
}), }),
{ type: "separator" }, { type: "separator" },
{ {