Merge pull request #525 from Araxeus/fix-precise-volume-options-sync

fix precise-volume options sync
This commit is contained in:
th-ch
2021-12-30 17:57:13 +01:00
committed by GitHub
2 changed files with 38 additions and 48 deletions

View File

@ -35,6 +35,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) {
@ -94,7 +102,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*/
@ -143,7 +151,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));
@ -212,39 +220,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;
}
});
}
}

View File

@ -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 {