From f4b81f3cdaf810043d95c4b7bfabcc10d7d88c26 Mon Sep 17 00:00:00 2001 From: hensm Date: Wed, 24 Oct 2018 00:29:40 +0100 Subject: [PATCH] Implement additional options --- ext/src/_locales/en/messages.json | 29 ++++++- ext/src/main.js | 133 ++++++++++++++++++++---------- ext/src/mirroringCast.js | 3 - ext/src/options/defaultOptions.js | 11 +++ ext/src/options/index.css | 4 +- ext/src/options/index.jsx | 91 +++++++++++++++++--- 6 files changed, 209 insertions(+), 62 deletions(-) create mode 100644 ext/src/options/defaultOptions.js diff --git a/ext/src/_locales/en/messages.json b/ext/src/_locales/en/messages.json index 3090df6..3b083eb 100755 --- a/ext/src/_locales/en/messages.json +++ b/ext/src/_locales/en/messages.json @@ -17,6 +17,17 @@ "message": "Cast..." } + + , "options_category_media": { + "message": "Media casting" + } + , "options_category_media_description": { + "message": "HTML5 video/audio media casting." + } + , "options_option_mediaEnabled": { + "message": "Enabled" + } + , "options_category_localMedia": { "message": "Local media casting" } @@ -40,7 +51,7 @@ "message": "Enabled" } , "options_option_uaWhitelist": { - "message": "Match matterns (newline-separated)" + "message": "Match patterns (newline-separated)" } , "options_option_uaWhitelistBasicView": { "message": "Basic View" @@ -64,6 +75,22 @@ "message": "Invalid match pattern $1" } + , "options_category_mirroring": { + "message": "Screen mirroring" + } + , "options_category_mirroring_description": { + "message": "Screen/Tab mirroring to a Chromecast receiver app." + } + , "options_option_mirroringEnabled": { + "message": "Enabled" + } + , "options_option_mirroringAppId": { + "message": "Receiver app ID" + } + + , "options_reset": { + "message": "Reset to defaults" + } , "options_submit": { "message": "Submit" } diff --git a/ext/src/main.js b/ext/src/main.js index 99d8690..475fd7b 100755 --- a/ext/src/main.js +++ b/ext/src/main.js @@ -1,26 +1,18 @@ "use strict"; -import messageRouter from "./messageRouter"; +import defaultOptions from "./options/defaultOptions"; +import messageRouter from "./messageRouter"; const _ = browser.i18n.getMessage; browser.runtime.onInstalled.addListener(async details => { - const initialOptions = { - option_localMediaEnabled: true - , option_localMediaServerPort: 9555 - , option_uaWhitelistEnabled: true - , option_uaWhitelist: [ - "https://www.netflix.com/*" - ] - }; - switch (details.reason) { - // Set initial options + // Set default options case "install": - browser.storage.sync.set({ - options: initialOptions + await browser.storage.sync.set({ + options: defaultOptions }); break; @@ -30,14 +22,14 @@ browser.runtime.onInstalled.addListener(async details => { const newOptions = {}; // Find options not already in storage - for (const [ key, val ] of Object.entries(initialOptions)) { + for (const [ key, val ] of Object.entries(defaultOptions)) { if (!options.hasOwnProperty(key)) { newOptions[key] = val; } } // Update storage with default values of new options - browser.storage.sync.set({ + await browser.storage.sync.set({ options: { ...options , ...newOptions @@ -46,9 +38,55 @@ browser.runtime.onInstalled.addListener(async details => { break; } + + // Call after default options have been set + createMenus(); }); +// Menu IDs +let mirrorCastMenuId; +let mediaCastMenuId; + +const mediaCastTargetUrlPatterns = new Set([ + "http://*/*" + , "https://*/*" +]); + +const LOCAL_MEDIA_URL_PATTERN = "file://*/*"; + +async function createMenus () { + const { options } = await browser.storage.sync.get("options"); + + /** + * If options aren't set or menus have already been + * created, return. + */ + if (!options || mirrorCastMenuId || mediaCastMenuId) return; + + if (options.option_localMediaEnabled) { + mediaCastTargetUrlPatterns.add(LOCAL_MEDIA_URL_PATTERN); + } + + //