Files
SysTray-X/webext/options.js

303 lines
7.5 KiB
JavaScript
Raw Normal View History

var SysTrayX = {};
SysTrayX.SaveOptions = {
start: function(e) {
e.preventDefault();
console.debug("Save preferences");
browser.storage.sync.set({
optionsRadioTest: document.querySelector(
'input[name="options_test"]:checked'
).value,
optionsCheck1: document.querySelector('input[name="check1"]').checked,
optionsCheck2: document.querySelector('input[name="check2"]').checked,
optionsCheck3: document.querySelector('input[name="check3"]').checked
});
//
// Save accounts and filters
//
console.debug("Store accounts and filters");
let treeBase = document.getElementById("accountsTree");
let 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;
accounts.push({ ...account, checked: checked });
if (checked) {
let inboxMailFolder = account.folders.find(obj => obj.type === "inbox");
if (inboxMailFolder) {
console.debug("Filter Id: " + inboxMailFolder.accountId);
console.debug("Filter Path: " + inboxMailFolder.path);
filters.push({
unread: true,
folder: inboxMailFolder
});
}
2020-01-12 01:15:19 +01:00
}
}
// Store accounts
browser.storage.sync.set({
accounts: accounts
});
// Store query filters
browser.storage.sync.set({
filters: filters
});
console.debug("Store accounts and filters done");
//
// Save debug state
//
let debug = document.querySelector('input[name="debug"]').checked;
browser.storage.sync.set({
debug: `${debug}`
});
console.debug("Store debug state: " + `${debug}`);
//
// Save icon preferences
//
console.debug("Store icon preferences");
let iconType = document.querySelector('input[name="iconType"]:checked')
.value;
// Store icon type
browser.storage.sync.set({
iconType: iconType
});
let iconDiv = document.getElementById("icon");
let iconBase64 = iconDiv.getAttribute("data-icon");
let iconMime = iconDiv.getAttribute("data-icon-mime");
// Store icon (base64)
browser.storage.sync.set({
iconMime: iconMime,
icon: iconBase64
});
console.debug("Store icon preferences done");
// Mark add-on preferences changed
browser.storage.sync.set({
addonprefchanged: true
});
2020-01-11 17:17:01 +01:00
}
};
2020-01-11 17:17:01 +01:00
SysTrayX.RestoreOptions = {
start: function() {
console.debug("Restore preferences");
2020-01-11 17:17:01 +01:00
//
// Test 1
//
let getting = browser.storage.sync.get("optionsRadioTest");
getting.then(
SysTrayX.RestoreOptions.setCurrentRadioChoice,
SysTrayX.RestoreOptions.onError
);
2020-01-12 01:15:19 +01:00
//
// Test 2
//
getting = browser.storage.sync.get([
"optionsCheck1",
"optionsCheck2",
"optionsCheck3"
]);
getting.then(
SysTrayX.RestoreOptions.setCurrentCheckChoice,
SysTrayX.RestoreOptions.onError
);
2020-01-05 00:54:40 +01:00
console.debug("Restore icon preferences");
2020-01-05 23:28:42 +01:00
//
// Restore debug state
//
let getDebug = browser.storage.sync.get("debug");
getDebug.then(
SysTrayX.RestoreOptions.setDebug,
SysTrayX.RestoreOptions.onDebugError
);
//
// Restore icon type
//
let getIconType = browser.storage.sync.get("iconType");
getIconType.then(
SysTrayX.RestoreOptions.setIconType,
SysTrayX.RestoreOptions.onIconTypeError
);
//
// Restore icon
//
let getIcon = browser.storage.sync.get(["iconMime", "icon"]);
getIcon.then(
SysTrayX.RestoreOptions.setIcon,
SysTrayX.RestoreOptions.onIconError
);
console.debug("Restore icon preferences done");
},
//
// Test 1 Callback
//
setCurrentRadioChoice: function(result) {
2020-01-05 23:28:42 +01:00
let selector = result.optionsRadioTest || "Option1";
2020-01-09 21:03:06 +01:00
let radioButton = document.querySelector(`[value=${selector}]`);
2020-01-05 23:28:42 +01:00
radioButton.checked = true;
},
2020-01-05 23:28:42 +01:00
//
// Test 2 Callback
//
setCurrentCheckChoice: function(result) {
2020-01-05 23:28:42 +01:00
let checkbox1 = document.querySelector('[name="check1"]');
2020-01-09 21:03:06 +01:00
checkbox1.checked = result.optionsCheck1 || false;
2020-01-05 23:28:42 +01:00
let checkbox2 = document.querySelector('[name="check2"]');
2020-01-09 21:03:06 +01:00
checkbox2.checked = result.optionsCheck2 || false;
2020-01-05 23:28:42 +01:00
let checkbox3 = document.querySelector('[name="check3"]');
2020-01-09 21:03:06 +01:00
checkbox3.checked = result.optionsCheck3 || false;
},
2020-01-05 00:54:40 +01:00
//
// Test 1+2 error callback
//
onError: function(error) {
2020-01-05 00:54:40 +01:00
console.log(`Error: ${error}`);
},
//
// Restore debug state callbacks
//
setDebug: function(result) {
let debug = result.debug || "false";
console.debug("Debug: " + debug);
let checkbox = document.querySelector(`input[name="debug"]`);
checkbox.checked = (debug === "true");
},
onDebugError: function(error) {
console.log(`Debug Error: ${error}`);
},
//
// Restore icon type callbacks
//
setIconType: function(result) {
let iconType = result.iconType || "0";
let radioButton = document.querySelector(`[value="${iconType}"]`);
radioButton.checked = true;
},
onIconTypeError: function(error) {
console.log(`Icon type Error: ${error}`);
},
//
// Restore icon
//
setIconMime: function(result) {
let iconMime = result.iconMime || "image/png";
let iconDiv = document.getElementById("icon");
iconDiv.setAttribute("data-icon-mime", iconMime);
},
setIconData: function(result) {
let iconBase64 = result.icon || "";
let iconDiv = document.getElementById("icon");
iconDiv.setAttribute("data-icon", iconBase64);
},
updateIconImage: function() {
let iconDiv = document.getElementById("icon");
icon_mime = iconDiv.getAttribute("data-icon-mime");
icon_data = iconDiv.getAttribute("data-icon");
let image = document.getElementById("customIconImage");
image.setAttribute("src", `data:${icon_mime};base64,${icon_data}`);
},
setIcon: function(result) {
SysTrayX.RestoreOptions.setIconMime(result);
SysTrayX.RestoreOptions.setIconData(result);
SysTrayX.RestoreOptions.updateIconImage();
},
onIconError: function(error) {
console.log(`Icon Error: ${error}`);
2020-01-05 00:54:40 +01:00
}
};
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);
let changed_icon = false;
let changed_icon_mime = false;
for (let item of changedItems) {
if (item === "iconMime") {
SysTrayX.RestoreOptions.setIconMime({
iconMime: changes[item].newValue
});
}
if (item === "icon") {
SysTrayX.RestoreOptions.setIcon({ icon: changes[item].newValue });
changed_icon = true;
}
if (item === "iconType") {
SysTrayX.RestoreOptions.setIconType({
iconType: changes[item].newValue
});
changed_icon_mime = true;
}
if (item === "debug") {
SysTrayX.RestoreOptions.setDebug({
debug: changes[item].newValue
});
}
}
2020-01-05 00:54:40 +01:00
if (changed_icon_mime && changed_icon) {
SysTrayX.RestoreOptions.updateIconImage();
}
2020-01-09 21:03:06 +01:00
//
// Update element
//
document.getElementById("debugselect").className = "active";
document.getElementById("iconselect").className = "active";
}
};
2020-01-05 00:54:40 +01:00
document.addEventListener("DOMContentLoaded", SysTrayX.RestoreOptions.start);
2020-01-09 21:03:06 +01:00
document
.querySelector('[name="saveform"]')
.addEventListener("submit", SysTrayX.SaveOptions.start);
browser.storage.onChanged.addListener(SysTrayX.StorageChanged.changed);