diff --git a/webext/background.js b/webext/background.js index 6959fce..1057376 100644 --- a/webext/background.js +++ b/webext/background.js @@ -72,14 +72,18 @@ SysTrayX.Messaging = { // // Get the unread nessages of the selected accounts // - let filtersDiv = document.getElementById("filters"); - let filtersAttr = filtersDiv.getAttribute("data-filters"); - let filters = JSON.parse(filtersAttr); + const filtersDiv = document.getElementById("filters"); + const filtersAttr = filtersDiv.getAttribute("data-filters"); + const filters = JSON.parse(filtersAttr); if (filters.length > 0) { SysTrayX.Messaging.unReadMessages(filters).then( SysTrayX.Messaging.unreadCb ); + } else { + SysTrayX.Messaging.unReadMessages([{ unread: true }]).then( + SysTrayX.Messaging.unreadCb + ); } }, @@ -115,7 +119,7 @@ SysTrayX.Messaging = { sendPreferences: function() { console.debug("Send preferences"); - let getter = browser.storage.sync.get([ + const getter = browser.storage.sync.get([ "debug", "iconType", "iconMime", @@ -127,10 +131,10 @@ SysTrayX.Messaging = { sendPreferencesStorage: function(result) { console.debug("Get preferences from storage"); - let debug = result.debug || "false"; - let iconType = result.iconType || "0"; - let iconMime = result.iconMime || "image/png"; - let icon = result.icon || []; + const debug = result.debug || "false"; + const iconType = result.iconType || "0"; + const iconMime = result.iconMime || "image/png"; + const icon = result.icon || []; console.log("Debug" + debug); console.log("Type" + iconType); @@ -158,16 +162,16 @@ SysTrayX.Messaging = { getAccounts: function() { console.debug("Get accounts"); - let getter = browser.storage.sync.get(["accounts", "filters"]); + const getter = browser.storage.sync.get(["accounts", "filters"]); getter.then(this.getAccountsStorage, this.onGetAccountsStorageError); if (SysTrayX.debugAccounts) { - let accountsDiv = document.getElementById("accounts"); + const accountsDiv = document.getElementById("accounts"); - let accountsAttr = accountsDiv.getAttribute("data-accounts"); + const accountsAttr = accountsDiv.getAttribute("data-accounts"); console.debug("Accounts attr: " + accountsAttr); - let accounts = JSON.parse(accountsAttr); + const accounts = JSON.parse(accountsAttr); console.debug("Accounts poll: " + accounts.length); } }, @@ -179,16 +183,16 @@ SysTrayX.Messaging = { getAccountsStorage: function(result) { console.debug("Get accounts from storage"); - let accounts = result.accounts || []; + const accounts = result.accounts || []; // Store them in the background HTML - let accountsDiv = document.getElementById("accounts"); + const accountsDiv = document.getElementById("accounts"); accountsDiv.setAttribute("data-accounts", JSON.stringify(accounts)); - let filters = result.filters || []; + const filters = result.filters || []; // Store them in the background HTML - let filtersDiv = document.getElementById("filters"); + const filtersDiv = document.getElementById("filters"); filtersDiv.setAttribute("data-filters", JSON.stringify(filters)); }, @@ -225,28 +229,28 @@ SysTrayX.Link = { // Store the preferences from the app console.log("Preferences received"); - let iconMime = response["preferences"].iconMime; + const iconMime = response["preferences"].iconMime; if (iconMime) { browser.storage.sync.set({ iconMime: iconMime }); } - let icon = response["preferences"].icon; + const icon = response["preferences"].icon; if (icon) { browser.storage.sync.set({ icon: icon }); } - let iconType = response["preferences"].iconType; + const iconType = response["preferences"].iconType; if (iconType) { browser.storage.sync.set({ iconType: iconType }); } - let debug = response["preferences"].debug; + const debug = response["preferences"].debug; if (debug) { browser.storage.sync.set({ debug: debug diff --git a/webext/js/options_iconform.js b/webext/js/options_iconform.js index eca3786..49f7dbe 100644 --- a/webext/js/options_iconform.js +++ b/webext/js/options_iconform.js @@ -1,5 +1,5 @@ function fileSelected() { - let input = document.getElementById("selectedFileIconType"); + const input = document.getElementById("selectedFileIconType"); if (input.files.length > 0) { console.debug("Selected file: " + input.files[0].name); @@ -7,20 +7,20 @@ function fileSelected() { } function storeFile() { - let buffer = new Uint8Array(fr.result); + const buffer = new Uint8Array(fr.result); let binary = ""; - let len = buffer.byteLength; + const len = buffer.byteLength; for (let i = 0; i < len; i++) { binary += String.fromCharCode(buffer[i]); } - let base64 = window.btoa(binary); - let iconDiv = document.getElementById("icon"); + const base64 = window.btoa(binary); + const iconDiv = document.getElementById("icon"); iconDiv.setAttribute("data-icon", base64); iconDiv.setAttribute("data-icon-mime", input.files[0].type); - let image = document.getElementById("customIconImage"); + const image = document.getElementById("customIconImage"); image.setAttribute("src", `data:${input.files[0].type};base64,${base64}` ); console.log(base64); diff --git a/webext/options.html b/webext/options.html index 775b2f9..7bb1ee0 100644 --- a/webext/options.html +++ b/webext/options.html @@ -55,7 +55,7 @@ Custom icon - + diff --git a/webext/options.js b/webext/options.js index c5cf65b..cd8c7c7 100644 --- a/webext/options.js +++ b/webext/options.js @@ -21,13 +21,13 @@ SysTrayX.SaveOptions = { console.debug("Store accounts and filters"); - let treeBase = document.getElementById("accountsTree"); - let inputs = treeBase.querySelectorAll("input"); + const treeBase = document.getElementById("accountsTree"); + const inputs = treeBase.querySelectorAll("input"); let accounts = []; let filters = []; for (let i = 0; i < inputs.length; ++i) { - let account = JSON.parse(inputs[i].value); - let checked = inputs[i].checked; + const account = JSON.parse(inputs[i].value); + const checked = inputs[i].checked; accounts.push({ ...account, checked: checked }); if (checked) { @@ -72,7 +72,7 @@ SysTrayX.SaveOptions = { console.debug("Store icon preferences"); - let iconType = document.querySelector('input[name="iconType"]:checked') + const iconType = document.querySelector('input[name="iconType"]:checked') .value; // Store icon type @@ -106,8 +106,8 @@ SysTrayX.RestoreOptions = { // // Test 1 // - let getting = browser.storage.sync.get("optionsRadioTest"); - getting.then( + const getRadioTest = browser.storage.sync.get("optionsRadioTest"); + getRadioTest.then( SysTrayX.RestoreOptions.setCurrentRadioChoice, SysTrayX.RestoreOptions.onError ); @@ -115,12 +115,12 @@ SysTrayX.RestoreOptions = { // // Test 2 // - getting = browser.storage.sync.get([ + const getCheckTest = browser.storage.sync.get([ "optionsCheck1", "optionsCheck2", "optionsCheck3" ]); - getting.then( + getCheckTest.then( SysTrayX.RestoreOptions.setCurrentCheckChoice, SysTrayX.RestoreOptions.onError ); @@ -130,7 +130,7 @@ SysTrayX.RestoreOptions = { // // Restore debug state // - let getDebug = browser.storage.sync.get("debug"); + const getDebug = browser.storage.sync.get("debug"); getDebug.then( SysTrayX.RestoreOptions.setDebug, SysTrayX.RestoreOptions.onDebugError @@ -139,7 +139,7 @@ SysTrayX.RestoreOptions = { // // Restore icon type // - let getIconType = browser.storage.sync.get("iconType"); + const getIconType = browser.storage.sync.get("iconType"); getIconType.then( SysTrayX.RestoreOptions.setIconType, SysTrayX.RestoreOptions.onIconTypeError @@ -148,7 +148,7 @@ SysTrayX.RestoreOptions = { // // Restore icon // - let getIcon = browser.storage.sync.get(["iconMime", "icon"]); + const getIcon = browser.storage.sync.get(["iconMime", "icon"]); getIcon.then( SysTrayX.RestoreOptions.setIcon, SysTrayX.RestoreOptions.onIconError @@ -161,8 +161,8 @@ SysTrayX.RestoreOptions = { // Test 1 Callback // setCurrentRadioChoice: function(result) { - let selector = result.optionsRadioTest || "Option1"; - let radioButton = document.querySelector(`[value=${selector}]`); + const selector = result.optionsRadioTest || "Option1"; + const radioButton = document.querySelector(`[value=${selector}]`); radioButton.checked = true; }, @@ -170,11 +170,11 @@ SysTrayX.RestoreOptions = { // Test 2 Callback // setCurrentCheckChoice: function(result) { - let checkbox1 = document.querySelector('[name="check1"]'); + const checkbox1 = document.querySelector('[name="check1"]'); checkbox1.checked = result.optionsCheck1 || false; - let checkbox2 = document.querySelector('[name="check2"]'); + const checkbox2 = document.querySelector('[name="check2"]'); checkbox2.checked = result.optionsCheck2 || false; - let checkbox3 = document.querySelector('[name="check3"]'); + const checkbox3 = document.querySelector('[name="check3"]'); checkbox3.checked = result.optionsCheck3 || false; }, @@ -189,12 +189,12 @@ SysTrayX.RestoreOptions = { // Restore debug state callbacks // setDebug: function(result) { - let debug = result.debug || "false"; + const debug = result.debug || "false"; console.debug("Debug: " + debug); - let checkbox = document.querySelector(`input[name="debug"]`); - checkbox.checked = (debug === "true"); + const checkbox = document.querySelector(`input[name="debug"]`); + checkbox.checked = debug === "true"; }, onDebugError: function(error) { @@ -205,8 +205,8 @@ SysTrayX.RestoreOptions = { // Restore icon type callbacks // setIconType: function(result) { - let iconType = result.iconType || "0"; - let radioButton = document.querySelector(`[value="${iconType}"]`); + const iconType = result.iconType || "0"; + const radioButton = document.querySelector(`[value="${iconType}"]`); radioButton.checked = true; }, @@ -218,33 +218,45 @@ SysTrayX.RestoreOptions = { // Restore icon // setIconMime: function(result) { - let iconMime = result.iconMime || "image/png"; + const iconMime = result.iconMime || ""; - let iconDiv = document.getElementById("icon"); - iconDiv.setAttribute("data-icon-mime", iconMime); + const valid = iconMime !== ""; + if (valid) { + const iconDiv = document.getElementById("icon"); + iconDiv.setAttribute("data-icon-mime", iconMime); + } + + return valid; }, setIconData: function(result) { - let iconBase64 = result.icon || ""; + const iconBase64 = result.icon || ""; - let iconDiv = document.getElementById("icon"); - iconDiv.setAttribute("data-icon", iconBase64); + const valid = iconBase64 !== ""; + if (valid) { + const iconDiv = document.getElementById("icon"); + iconDiv.setAttribute("data-icon", iconBase64); + } + + return valid; }, updateIconImage: function() { - let iconDiv = document.getElementById("icon"); + const iconDiv = document.getElementById("icon"); icon_mime = iconDiv.getAttribute("data-icon-mime"); icon_data = iconDiv.getAttribute("data-icon"); - let image = document.getElementById("customIconImage"); + const image = document.getElementById("customIconImage"); image.setAttribute("src", `data:${icon_mime};base64,${icon_data}`); }, setIcon: function(result) { - SysTrayX.RestoreOptions.setIconMime(result); - SysTrayX.RestoreOptions.setIconData(result); + const validMime = SysTrayX.RestoreOptions.setIconMime(result); + const validData = SysTrayX.RestoreOptions.setIconData(result); - SysTrayX.RestoreOptions.updateIconImage(); + if (validMime && validData) { + SysTrayX.RestoreOptions.updateIconImage(); + } }, onIconError: function(error) { @@ -255,7 +267,7 @@ SysTrayX.RestoreOptions = { SysTrayX.StorageChanged = { changed: function(changes, area) { // Try to keep the preferences of the add-on and the app in sync - let changedItems = Object.keys(changes); + const changedItems = Object.keys(changes); let changed_icon = false; let changed_icon_mime = false; @@ -294,6 +306,49 @@ SysTrayX.StorageChanged = { } }; +// +// Set default icon +// +const toDataURL = url => + fetch(url) + .then(response => response.blob()) + .then( + blob => + new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => resolve(reader.result); + reader.onerror = reject; + reader.readAsDataURL(blob); + }) + ); + +toDataURL("icons/blank-icon.png").then(dataUrl => { + const data = dataUrl + .split(":") + .pop() + .split(","); + const mime = data[0].split(";")[0]; + const base64 = data[1]; + + const iconDiv = document.getElementById("icon"); + + if ( + iconDiv.getAttribute("data-icon") === "" && + iconDiv.getAttribute("data-icon-mime") === "" + ) { + iconDiv.setAttribute("data-icon", base64); + iconDiv.setAttribute("data-icon-mime", mime); + + console.debug("Default set"); + } + + console.debug("Default: " + mime); + console.debug("Default: " + base64); +}); + +// +// Main +// document.addEventListener("DOMContentLoaded", SysTrayX.RestoreOptions.start); document .querySelector('[name="saveform"]')