diff --git a/ext/src/lib/options.ts b/ext/src/lib/options.ts index 8ca88e4..fe2371d 100644 --- a/ext/src/lib/options.ts +++ b/ext/src/lib/options.ts @@ -1,6 +1,6 @@ "use strict"; -import { Options } from "../defaultOptions"; +import defaultOptions, { Options } from "../defaultOptions"; /** @@ -48,7 +48,32 @@ async function set ( } +/** + * Gets existing options from storage and compares it + * against defaults. Any options in defaults and not in + * storage are set. Does not override any existing options. + */ +async function update (defaults = defaultOptions): Promise { + const oldOpts = await getAll(); + const newOpts: Partial = {}; + + // Find options not already in storage + for (const [ optName, optVal ] of Object.entries(defaults)) { + if (!oldOpts.hasOwnProperty(optName)) { + newOpts[optName] = optVal; + } + } + + // Update storage with default values of new options + return setAll({ + ...oldOpts + , ...newOpts + }); +} + + export default { get, getAll , set, setAll -} + , update +}; diff --git a/ext/src/main.ts b/ext/src/main.ts index 68c8c10..a551ba6 100755 --- a/ext/src/main.ts +++ b/ext/src/main.ts @@ -5,8 +5,8 @@ import semver from "semver"; import defaultOptions, { Options } from "./defaultOptions"; import getBridgeInfo from "./lib/getBridgeInfo"; import messageRouter from "./lib/messageRouter"; -import options from "./lib/options"; import nativeMessaging from "./lib/nativeMessaging"; +import options from "./lib/options"; import { getChromeUserAgent } from "./lib/userAgents"; import { getWindowCenteredProps } from "./lib/utils"; @@ -33,25 +33,9 @@ browser.runtime.onInstalled.addListener(async details => { await options.setAll(defaultOptions); break; } - // Set newly added options case "update": { - const existingOptions = await options.getAll(); - const newOptions: Partial = {}; - - // Find options not already in storage - for (const [ key, val ] of Object.entries(defaultOptions)) { - if (!existingOptions.hasOwnProperty(key)) { - (newOptions as any)[key] = val; - } - } - - // Update storage with default values of new options - options.setAll({ - ...existingOptions - , ...newOptions - }); - + await options.update(defaultOptions); break; } } @@ -513,7 +497,7 @@ browser.menus.onClicked.addListener(async (info, tab) => { userAgentWhitelist.push(matchPattern); // Update options - await options.set("userAgentWhitelist", userAgentWhitelist) + await options.set("userAgentWhitelist", userAgentWhitelist); } }); diff --git a/ext/src/receiverSelectorManager/selectorManagers/NativeMacReceiverSelectorManager.ts b/ext/src/receiverSelectorManager/selectorManagers/NativeMacReceiverSelectorManager.ts index 27249fb..db2cef0 100644 --- a/ext/src/receiverSelectorManager/selectorManagers/NativeMacReceiverSelectorManager.ts +++ b/ext/src/receiverSelectorManager/selectorManagers/NativeMacReceiverSelectorManager.ts @@ -1,7 +1,7 @@ "use strict"; -import options from "../../lib/options"; import nativeMessaging from "../../lib/nativeMessaging"; +import options from "../../lib/options"; import ReceiverSelectorManager, { ReceiverSelectorMediaType } from "../ReceiverSelectorManager";