From 74b67c3d338e80782d940e6b02a19ed00a828817 Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Thu, 20 Jan 2022 22:54:19 +0200 Subject: [PATCH] fix restart app on config change option --- config/index.js | 7 +++++++ config/plugins.js | 11 +++++++++-- index.js | 6 ------ menu.js | 32 ++++++++++++++++---------------- plugins/discord/menu.js | 6 +++--- plugins/downloader/menu.js | 6 +++--- plugins/notifications/utils.js | 4 ++-- plugins/precise-volume/front.js | 4 ++-- plugins/precise-volume/menu.js | 4 ++-- plugins/shortcuts/menu.js | 4 ++-- plugins/video-toggle/menu.js | 4 ++-- providers/app-controls.js | 6 ++++++ 12 files changed, 54 insertions(+), 40 deletions(-) create mode 100644 providers/app-controls.js diff --git a/config/index.js b/config/index.js index c77e4d004c..cf33369ec6 100644 --- a/config/index.js +++ b/config/index.js @@ -1,11 +1,17 @@ const defaultConfig = require("./defaults"); const plugins = require("./plugins"); const store = require("./store"); +const { restart } = require("../providers/app-controls"); const set = (key, value) => { store.set(key, value); }; +function setMenuOption(key, value) { + set(key, value); + if (store.get("options.restartOnConfigChanges")) restart(); +} + const get = (key) => { return store.get(key); }; @@ -14,6 +20,7 @@ module.exports = { defaultConfig, get, set, + setMenuOption, edit: () => store.openInEditor(), watch: (cb) => { store.onDidChange("options", cb); diff --git a/config/plugins.js b/config/plugins.js index 7a73335cb6..b8c00f831d 100644 --- a/config/plugins.js +++ b/config/plugins.js @@ -1,4 +1,5 @@ const store = require("./store"); +const { restart } = require("../providers/app-controls"); function getEnabled() { const plugins = store.get("plugins"); @@ -24,16 +25,21 @@ function setOptions(plugin, options) { }); } +function setMenuOptions(plugin, options) { + setOptions(plugin, options); + if (store.get("options.restartOnConfigChanges")) restart(); +} + function getOptions(plugin) { return store.get("plugins")[plugin]; } function enable(plugin) { - setOptions(plugin, { enabled: true }); + setMenuOptions(plugin, { enabled: true }); } function disable(plugin) { - setOptions(plugin, { enabled: false }); + setMenuOptions(plugin, { enabled: false }); } module.exports = { @@ -42,5 +48,6 @@ module.exports = { enable, disable, setOptions, + setMenuOptions, getOptions, }; diff --git a/index.js b/index.js index 07801d5805..f12d6ddc82 100644 --- a/index.js +++ b/index.js @@ -307,12 +307,6 @@ app.on("ready", () => { mainWindow = createMainWindow(); setApplicationMenu(mainWindow); - if (config.get("options.restartOnConfigChanges")) { - config.watch(() => { - app.relaunch(); - app.exit(); - }); - } setUpTray(app, mainWindow); // Autostart at login diff --git a/menu.js b/menu.js index 0a62249bc3..394f05c793 100644 --- a/menu.js +++ b/menu.js @@ -68,7 +68,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.autoUpdates"), click: (item) => { - config.set("options.autoUpdates", item.checked); + config.setMenuOption("options.autoUpdates", item.checked); }, }, { @@ -76,7 +76,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.resumeOnStart"), click: (item) => { - config.set("options.resumeOnStart", item.checked); + config.setMenuOption("options.resumeOnStart", item.checked); }, }, { @@ -84,7 +84,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.removeUpgradeButton"), click: (item) => { - config.set("options.removeUpgradeButton", item.checked); + config.setMenuOption("options.removeUpgradeButton", item.checked); }, }, ...(is.windows() || is.linux() @@ -94,7 +94,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.hideMenu"), click: (item) => { - config.set("options.hideMenu", item.checked); + config.setMenuOption("options.hideMenu", item.checked); if (item.checked && !config.get("options.hideMenuWarned")) { dialog.showMessageBox(win, { type: 'info', title: 'Hide Menu Enabled', @@ -114,7 +114,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.startAtLogin"), click: (item) => { - config.set("options.startAtLogin", item.checked); + config.setMenuOption("options.startAtLogin", item.checked); }, }, ] @@ -127,8 +127,8 @@ const mainMenuTemplate = (win) => { type: "radio", checked: !config.get("options.tray"), click: () => { - config.set("options.tray", false); - config.set("options.appVisible", true); + config.setMenuOption("options.tray", false); + config.setMenuOption("options.appVisible", true); }, }, { @@ -137,8 +137,8 @@ const mainMenuTemplate = (win) => { checked: config.get("options.tray") && config.get("options.appVisible"), click: () => { - config.set("options.tray", true); - config.set("options.appVisible", true); + config.setMenuOption("options.tray", true); + config.setMenuOption("options.appVisible", true); }, }, { @@ -147,8 +147,8 @@ const mainMenuTemplate = (win) => { checked: config.get("options.tray") && !config.get("options.appVisible"), click: () => { - config.set("options.tray", true); - config.set("options.appVisible", false); + config.setMenuOption("options.tray", true); + config.setMenuOption("options.appVisible", false); }, }, { type: "separator" }, @@ -157,7 +157,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.trayClickPlayPause"), click: (item) => { - config.set("options.trayClickPlayPause", item.checked); + config.setMenuOption("options.trayClickPlayPause", item.checked); }, }, ], @@ -179,7 +179,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.disableHardwareAcceleration"), click: (item) => { - config.set("options.disableHardwareAcceleration", item.checked); + config.setMenuOption("options.disableHardwareAcceleration", item.checked); }, }, { @@ -187,7 +187,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.restartOnConfigChanges"), click: (item) => { - config.set("options.restartOnConfigChanges", item.checked); + config.setMenuOption("options.restartOnConfigChanges", item.checked); }, }, { @@ -195,7 +195,7 @@ const mainMenuTemplate = (win) => { type: "checkbox", checked: config.get("options.autoResetAppCache"), click: (item) => { - config.set("options.autoResetAppCache", item.checked); + config.setMenuOption("options.autoResetAppCache", item.checked); }, }, { type: "separator" }, @@ -316,7 +316,7 @@ async function setProxy(item, win) { }, win); if (typeof output === "string") { - config.set("options.proxy", output); + config.setMenuOption("options.proxy", output); item.checked = output !== ""; } else { //user pressed cancel item.checked = !item.checked; //reset checkbox diff --git a/plugins/discord/menu.js b/plugins/discord/menu.js index 49a087d61d..5bdf1f5965 100644 --- a/plugins/discord/menu.js +++ b/plugins/discord/menu.js @@ -1,4 +1,4 @@ -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); const { edit } = require("../../config"); const { clear, connect, registerRefresh, isConnected } = require("./back"); @@ -26,7 +26,7 @@ module.exports = (win, options, refreshMenu) => { checked: options.activityTimoutEnabled, click: (item) => { options.activityTimoutEnabled = item.checked; - setOptions('discord', options); + setMenuOptions('discord', options); }, }, { @@ -35,7 +35,7 @@ module.exports = (win, options, refreshMenu) => { checked: options.listenAlong, click: (item) => { options.listenAlong = item.checked; - setOptions('discord', options); + setMenuOptions('discord', options); }, }, { diff --git a/plugins/downloader/menu.js b/plugins/downloader/menu.js index 2f2df4212f..893283c6b7 100644 --- a/plugins/downloader/menu.js +++ b/plugins/downloader/menu.js @@ -6,7 +6,7 @@ const is = require("electron-is"); const ytpl = require("ytpl"); const chokidar = require('chokidar'); -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); const { sendError } = require("./back"); const { defaultMenuDownloadLabel, getFolder, presets, setBadge } = require("./utils"); @@ -48,7 +48,7 @@ module.exports = (win, options) => { }); if (result) { options.downloadFolder = result[0]; - setOptions("downloader", options); + setMenuOptions("downloader", options); } // else = user pressed cancel }, }, @@ -59,7 +59,7 @@ module.exports = (win, options) => { type: "radio", click: () => { options.preset = preset; - setOptions("downloader", options); + setMenuOptions("downloader", options); }, checked: options.preset === preset || presets[preset] === undefined, })), diff --git a/plugins/notifications/utils.js b/plugins/notifications/utils.js index 34c73a774a..7cb9e61ec7 100644 --- a/plugins/notifications/utils.js +++ b/plugins/notifications/utils.js @@ -1,4 +1,4 @@ -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); const path = require("path"); const { app } = require("electron"); const fs = require("fs"); @@ -15,7 +15,7 @@ module.exports.icons = { module.exports.setOption = (options, option, value) => { options[option] = value; - setOptions("notifications", options) + setMenuOptions("notifications", options) } module.exports.urgencyLevels = [ diff --git a/plugins/precise-volume/front.js b/plugins/precise-volume/front.js index 33c9e8c1c6..a21e023441 100644 --- a/plugins/precise-volume/front.js +++ b/plugins/precise-volume/front.js @@ -1,7 +1,7 @@ const { ipcRenderer } = require("electron"); const { globalShortcut } = require('@electron/remote'); -const { setOptions } = require("../../config/plugins"); +const { setOptions, setMenuOptions } = require("../../config/plugins"); function $(selector) { return document.querySelector(selector); } let api; @@ -41,7 +41,7 @@ function firstRun(options) { for (option in newOptions) { options[option] = newOptions[option]; } - setOptions("precise-volume", options); + setMenuOptions("precise-volume", options); }); } diff --git a/plugins/precise-volume/menu.js b/plugins/precise-volume/menu.js index c3d56f8f82..74f7b14a15 100644 --- a/plugins/precise-volume/menu.js +++ b/plugins/precise-volume/menu.js @@ -1,5 +1,5 @@ const { enabled } = require("./back"); -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); const prompt = require("custom-electron-prompt"); const promptOptions = require("../../providers/prompt-options"); @@ -11,7 +11,7 @@ function changeOptions(changedOptions, options, win) { if (enabled()) { win.webContents.send("setOptions", changedOptions); } else { // Fallback to usual method if disabled - setOptions("precise-volume", options); + setMenuOptions("precise-volume", options); } } diff --git a/plugins/shortcuts/menu.js b/plugins/shortcuts/menu.js index 20f21233a9..df9db1615a 100644 --- a/plugins/shortcuts/menu.js +++ b/plugins/shortcuts/menu.js @@ -1,4 +1,4 @@ -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); const prompt = require("custom-electron-prompt"); const promptOptions = require("../../providers/prompt-options"); @@ -20,7 +20,7 @@ function setOption(options, key = null, newValue = null) { options[key] = newValue; } - setOptions("shortcuts", options); + setMenuOptions("shortcuts", options); } // Helper function for keybind prompt diff --git a/plugins/video-toggle/menu.js b/plugins/video-toggle/menu.js index a73407caf6..fb539405b5 100644 --- a/plugins/video-toggle/menu.js +++ b/plugins/video-toggle/menu.js @@ -1,4 +1,4 @@ -const { setOptions } = require("../../config/plugins"); +const { setMenuOptions } = require("../../config/plugins"); module.exports = (win, options) => [ { @@ -7,7 +7,7 @@ module.exports = (win, options) => [ checked: options.forceHide, click: item => { options.forceHide = item.checked; - setOptions("video-toggle", options); + setMenuOptions("video-toggle", options); } } ]; diff --git a/providers/app-controls.js b/providers/app-controls.js new file mode 100644 index 0000000000..9faded696a --- /dev/null +++ b/providers/app-controls.js @@ -0,0 +1,6 @@ +const app = require("electron").app || require('@electron/remote').app; + +module.exports.restart = () => { + app.relaunch(); + app.exit(); +};