From ed7025b4a26146b5d7a477f34552708584a5ee39 Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Fri, 24 Dec 2021 01:58:15 +0200 Subject: [PATCH] fix precise-volume options sync --- plugins/precise-volume/front.js | 58 +++++++++++++-------------------- plugins/precise-volume/menu.js | 28 +++++++++------- 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/plugins/precise-volume/front.js b/plugins/precise-volume/front.js index 189a20eb..0fec2787 100644 --- a/plugins/precise-volume/front.js +++ b/plugins/precise-volume/front.js @@ -34,6 +34,14 @@ function firstRun(options) { if (!noVid) { setupVideoPlayerOnwheel(options); } + + // Change options from renderer to keep sync + ipcRenderer.on("setOptions", (_event, newOptions = {}) => { + for (option in newOptions) { + options[option] = newOptions[option]; + } + setOptions("precise-volume", options); + }); } function injectVolumeHud(noVid) { @@ -93,7 +101,7 @@ function writeOptions(options) { writeTimeout = setTimeout(() => { setOptions("precise-volume", options); writeTimeout = null; - }, 1500) + }, 1000) } /** Add onwheel event to play bar and also track if play bar is hovered*/ @@ -142,7 +150,7 @@ function setupSliderObserver(options) { /** if (toIncrease = false) then volume decrease */ function changeVolume(toIncrease, options) { // Apply volume change if valid - const steps = (options.steps || 1); + const steps = Number(options.steps || 1); api.setVolume(toIncrease ? Math.min(api.getVolume() + steps, 100) : Math.max(api.getVolume() - steps, 0)); @@ -211,39 +219,17 @@ function setupGlobalShortcuts(options) { function setupLocalArrowShortcuts(options) { if (options.arrowsShortcut) { - addListener(); - } - - // Change options from renderer to keep sync - ipcRenderer.on("setArrowsShortcut", (_event, isEnabled) => { - options.arrowsShortcut = isEnabled; - setOptions("precise-volume", options); - // This allows changing this setting without restarting app - if (isEnabled) { - addListener(); - } else { - removeListener(); - } - }); - - function addListener() { - window.addEventListener('keydown', callback); - } - - function removeListener() { - window.removeEventListener("keydown", callback); - } - - function callback(event) { - switch (event.code) { - case "ArrowUp": - event.preventDefault(); - changeVolume(true, options); - break; - case "ArrowDown": - event.preventDefault(); - changeVolume(false, options); - break; - } + window.addEventListener('keydown', (event) => { + switch (event.code) { + case "ArrowUp": + event.preventDefault(); + changeVolume(true, options); + break; + case "ArrowDown": + event.preventDefault(); + changeVolume(false, options); + break; + } + }); } } diff --git a/plugins/precise-volume/menu.js b/plugins/precise-volume/menu.js index 06ee84b9..c3d56f8f 100644 --- a/plugins/precise-volume/menu.js +++ b/plugins/precise-volume/menu.js @@ -3,6 +3,17 @@ const { setOptions } = require("../../config/plugins"); const prompt = require("custom-electron-prompt"); const promptOptions = require("../../providers/prompt-options"); +function changeOptions(changedOptions, options, win) { + for (option in changedOptions) { + options[option] = changedOptions[option]; + } + // Dynamically change setting if plugin is enabled + if (enabled()) { + win.webContents.send("setOptions", changedOptions); + } else { // Fallback to usual method if disabled + setOptions("precise-volume", options); + } +} module.exports = (win, options) => [ { @@ -10,13 +21,7 @@ module.exports = (win, options) => [ type: "checkbox", checked: !!options.arrowsShortcut, click: item => { - // Dynamically change setting if plugin is enabled - if (enabled()) { - win.webContents.send("setArrowsShortcut", item.checked); - } else { // Fallback to usual method if disabled - options.arrowsShortcut = item.checked; - setOptions("precise-volume", options); - } + changeOptions({ arrowsShortcut: item.checked }, options, win); } }, { @@ -46,8 +51,7 @@ async function promptVolumeSteps(win, options) { }, win) if (output || output === 0) { // 0 is somewhat valid - options.steps = output; - setOptions("precise-volume", options); + changeOptions({ steps: output}, options, win); } } @@ -64,11 +68,11 @@ async function promptGlobalShortcuts(win, options, item) { }, win) if (output) { + let newGlobalShortcuts = {}; for (const { value, accelerator } of output) { - options.globalShortcuts[value] = accelerator; + newGlobalShortcuts[value] = accelerator; } - - setOptions("precise-volume", options); + changeOptions({ globalShortcuts: newGlobalShortcuts }, options, win); item.checked = !!options.globalShortcuts.volumeUp || !!options.globalShortcuts.volumeDown; } else {