Add default options for new message menu item

This commit is contained in:
Ximi1970
2024-08-28 22:02:01 +02:00
parent 1ab151c7e3
commit 6ba8f0c654
7 changed files with 312 additions and 54 deletions

View File

@@ -439,9 +439,14 @@
"description": "Default for: "
},
"accounts_defaults_subject": {
"message": "Subject:",
"description": "Subject:"
"accounts_defaults_replyto": {
"message": "Reply to:",
"description": "Reply to:"
},
"accounts_defaults_to": {
"message": "To:",
"description": "To:"
},
"accounts_defaults_cc": {
@@ -454,9 +459,14 @@
"description": "Bcc:"
},
"accounts_defaults_replyto": {
"message": "Reply to:",
"description": "Reply to:"
"accounts_defaults_subject": {
"message": "Subject:",
"description": "Subject:"
},
"accounts_defaults_body": {
"message": "Body:",
"description": "Body:"
},
"accounts_defaults_pgp_key": {
@@ -489,9 +499,9 @@
"description": "Clear"
},
"accounts_defaults_save": {
"message": "Save",
"description": "Save"
"accounts_defaults_accept": {
"message": "Accept",
"description": "Accept"
},
"shortcuts": {

View File

@@ -15,6 +15,8 @@ var SysTrayX = {
startApp: "",
startAppArgs: "",
newMessageDefaults: {}
};
SysTrayX.Info = {
@@ -324,6 +326,10 @@ SysTrayX.Messaging = {
sendMailCount();
}
if ("newMessageDefaults" in changes && changes["newMessageDefaults"].newValue) {
SysTrayX.newMessageDefaults = JSON.parse(changes["newMessageDefaults"].newValue);
}
if ("closeType" in changes && changes["closeType"].newValue) {
SysTrayX.Messaging.closeType = changes["closeType"].newValue;
@@ -456,6 +462,7 @@ SysTrayX.Messaging = {
"closeAppArgs",
"showHideShortcut",
"newMessageFroms",
"newMessageDefaults",
])
.then(
SysTrayX.Messaging.sendPreferencesStorage,
@@ -502,6 +509,7 @@ SysTrayX.Messaging = {
const closeAppArgs = result.closeAppArgs || "";
const showHideShortcut = result.showHideShortcut || "";
const newMessageFroms = result.newMessageFroms || [];
const newMessageDefaults = result.newMessageDefaults || "";
// Send it to the app
SysTrayX.Link.postSysTrayXMessage({
@@ -539,6 +547,7 @@ SysTrayX.Messaging = {
closeAppArgs,
showHideShortcut,
newMessageFroms,
newMessageDefaults,
},
});
},
@@ -594,9 +603,45 @@ SysTrayX.Link = {
{
var tab = await browser.compose.beginNew();
} else {
const details = {
from: newMessage
const newMessageDefaults = SysTrayX.newMessageDefaults[newMessage] ?? undefined;
console.debug("PgpKey type: " + typeof(newMessageDefaults.pgpKey));
let details = {};
if (newMessageDefaults !== undefined)
{
if (SysTrayX.Info.browserInfo.majorVersion < 102) {
details = {
from: newMessage,
// attachPublicPGPKey: newMessageDefaults.pgpKey, //TB128 no error, working?
bcc: newMessageDefaults.bcc.split(";"),
body: newMessageDefaults.body,
cc: newMessageDefaults.cc.split(";"),
replyTo: newMessageDefaults.replyTo.split(";"),
subject: newMessageDefaults.subject,
to: newMessageDefaults.to.split(";"),
}
} else {
details = {
from: newMessage,
// attachPublicPGPKey: newMessageDefaults.pgpKey, //TB128 no error, working?
// attachVCard: newMessageDefaults.vCard, // Not working
bcc: newMessageDefaults.bcc.split(";"),
body: newMessageDefaults.body,
cc: newMessageDefaults.cc.split(";"),
deliveryStatusNotification: newMessageDefaults.statNot,
replyTo: newMessageDefaults.replyTo.split(";"),
returnReceipt: newMessageDefaults.retRec,
subject: newMessageDefaults.subject,
to: newMessageDefaults.to.split(";"),
}
}
} else {
details = {
from: newMessage
}
}
var tab = await browser.compose.beginNew(undefined,details);
}
}
@@ -1003,6 +1048,10 @@ async function start() {
SysTrayX.startApp = startApp;
SysTrayX.startAppArgs = startAppArgs;
// Get new message defaults
const newMessageDefaults = await getNewMessageDefaults();
SysTrayX.newMessageDefaults = newMessageDefaults;
// Used sync storage
// const inUse = await browser.storage.sync.getBytesInUse();
// console.log("Storage in use: " + inUse);

View File

@@ -108,7 +108,7 @@ body {
width: 100%;
}
#accountmenudialog1:input {
#accountmenudialog1 textarea {
width: 100%
}

View File

@@ -454,6 +454,28 @@ async function getStartAppParam() {
.then(resolve, reject);
}
//
// Get new message defaults
//
async function getNewMessageDefaults() {
function resolve(result) {
const newMessageDefaults = result.newMessageDefaults || "";
if (newMessageDefaults !== "")
{
return JSON.parse(newMessageDefaults);
}
return {};
}
function reject() {
return {};
}
return await storage().get("newMessageDefaults").then(resolve, reject);
}
// Helper funcs for TB91 and later folder handling
async function getMailFolderInfo(folder) {

View File

@@ -141,17 +141,77 @@ SysTrayX.Accounts = {
typeButton.setAttribute("name", accounts[prop][i].name);
typeButton.innerHTML = " &#9776;";
// Get the divs
const divAccountsFolders = document.getElementById("accountsFolders");
const divAccountMenuDialog = document.getElementById("accountMenuDialog");
// Get the elements
const accountMenuRepInput = document.getElementById("accountMenuReplyToInput");
const accountMenuToInput = document.getElementById("accountMenuToInput");
const accountMenuCcInput = document.getElementById("accountMenuCcInput");
const accountMenuBccInput = document.getElementById("accountMenuBccInput");
const accountMenuSubInput = document.getElementById("accountMenuSubjectInput");
const accountMenuBodyTextArea = document.getElementById("accountMenuBodyTextArea");
const accountMenuPgpKeyCheckbox = document.getElementById("accountMenuPgpKeyChk");
const accountMenuVCardCheckbox = document.getElementById("accountMenuVCardChk");
const accountMenuStatNotCheckbox = document.getElementById("accountMenuStatNotChk");
const accountMenuRetRecCheckbox = document.getElementById("accountMenuReturnReceiptChk");
const handleClickEvent = (e) => {
e.preventDefault();
// Construct the dialog
if (SysTrayX.Info.browserInfo.majorVersion < 102) {
const accountMenuvCard = document.getElementById("accountmenuvcard");
accountMenuvCard.setAttribute("style", "display: none");
SysTrayX.Settings.activeFrom = e.target.name;
// Restore saved data
const defaults = SysTrayX.Settings.newMessageDefaults[SysTrayX.Settings.activeFrom];
console.debug("Defaults restore: " + JSON.stringify(defaults));
if (defaults !== undefined)
{
accountMenuRepInput.value = defaults.replyTo ?? "";
accountMenuToInput.value = defaults.to ?? "";
accountMenuCcInput.value = defaults.cc ?? "";
accountMenuBccInput.value = defaults.bcc ?? "";
accountMenuSubInput.value = defaults.subject ?? "";
accountMenuBodyTextArea.value = defaults.body ?? "";
accountMenuPgpKeyCheckbox.checked = defaults.pgpKey ?? false;
accountMenuVCardCheckbox.checked = defaults.vCard ?? false;
accountMenuStatNotCheckbox.checked = defaults.statNot ?? false;
accountMenuRetRecCheckbox.checked = defaults.retRec ?? false;
} else {
accountMenuRepInput.value = "";
accountMenuToInput.value = "";
accountMenuCcInput.value = "";
accountMenuBccInput.value = "";
accountMenuSubInput.value = "";
accountMenuBodyTextArea.value = "";
accountMenuPgpKeyCheckbox.checked = false;
accountMenuVCardCheckbox.checked = false;
accountMenuStatNotCheckbox.checked = false;
accountMenuRetRecCheckbox.checked = false;
}
// Construct the dialog
// Not working...
const accountMenuPgpKey = document.getElementById("accountmenupgpkey");
accountMenuPgpKey.setAttribute("style", "display: none");
const accountMenuVCard = document.getElementById("accountmenuvcard");
accountMenuVCard.setAttribute("style", "display: none");
// TB version depending
if (SysTrayX.Info.browserInfo.majorVersion < 102) {
const accountMenuVCard = document.getElementById("accountmenuvcard");
accountMenuVCard.setAttribute("style", "display: none");
const accountMenuStatNot = document.getElementById("accountmenustatnot");
accountMenuStatNot.setAttribute("style", "display: none");
const accountMenuRetRec = document.getElementById("accountmenureturnreceipt");
accountMenuRetRec.setAttribute("style", "display: none");
}
@@ -159,39 +219,76 @@ SysTrayX.Accounts = {
const divAccountMenuId = document.getElementById("accountMenuId");
divAccountMenuId.innerHTML = e.target.name;
const divAccountsFolders = document.getElementById("accountsFolders");
divAccountsFolders.setAttribute("style", "display: none");
const divAccountMenuDialog = document.getElementById("accountMenuDialog");
divAccountMenuDialog.removeAttribute("style");
// Do something
};
typeButton.onclick = handleClickEvent;
typeDiv.appendChild(typeButton);
typeLi.appendChild(typeDiv);
// Setup the buttons of the account menu dialog
const handleClickBackEvent = (e) => {
e.preventDefault();
const divAccountsFolders = document.getElementById("accountsFolders");
divAccountsFolders.removeAttribute("style");
const divAccountMenuDialog = document.getElementById("accountMenuDialog");
divAccountMenuDialog.setAttribute("style", "display: none");
SysTrayX.Settings.activeFrom = undefined;
}
const accountMenuBack = document.getElementById("accountMenuBack");
accountMenuBack.onclick = handleClickBackEvent;
// const accountMenuClear = document.getElementById("accountMenuClear");
// const accountMenuSave = document.getElementById("accountMenuSave");
const handleClickClearEvent = (e) => {
e.preventDefault();
accountMenuRepInput.value = "";
accountMenuToInput.value = "";
accountMenuCcInput.value = "";
accountMenuBccInput.value = "";
accountMenuSubInput.value = "";
accountMenuBodyTextArea.value = "";
typeDiv.appendChild(typeButton);
accountMenuPgpKeyCheckbox.checked = false;
accountMenuVCardCheckbox.checked = false;
accountMenuStatNotCheckbox.checked = false;
accountMenuRetRecCheckbox.checked = false;
}
typeLi.appendChild(typeDiv);
const accountMenuClear = document.getElementById("accountMenuClear");
accountMenuClear.onclick = handleClickClearEvent;
const handleClickAcceptEvent = (e) => {
e.preventDefault();
// Save data
SysTrayX.Settings.newMessageDefaults[SysTrayX.Settings.activeFrom] = {
replyTo: accountMenuRepInput.value,
to: accountMenuToInput.value,
cc: accountMenuCcInput.value,
bcc: accountMenuBccInput.value,
subject: accountMenuSubInput.value,
body: accountMenuBodyTextArea.value,
pgpKey: accountMenuPgpKeyCheckbox.checked,
vCard: accountMenuVCardCheckbox.checked,
statNot: accountMenuStatNotCheckbox.checked,
retRec: accountMenuRetRecCheckbox.checked
};
// Return to main view
divAccountsFolders.removeAttribute("style");
divAccountMenuDialog.setAttribute("style", "display: none");
SysTrayX.Settings.activeFrom = undefined;
}
const accountMenuAccept = document.getElementById("accountMenuAccept");
accountMenuAccept.onclick = handleClickAcceptEvent;
}
// Create a usable folder tree

View File

@@ -736,16 +736,35 @@
<h4 id="accountMenuId">x@y</h4>
</div>
</caption>
<tr id="accountmenusubject">
<tr id="accountmenureplyto">
<td>
<label>__MSG_accounts_defaults_subject__</label>
<label for="accountMenuReplyToInput" id="accountMenuReplyToInputLabel">
__MSG_accounts_defaults_replyto__
</label>
</td>
<td>
<input
type="text"
name="accountmenusubject"
id="accountMenuSubjectInput"
name="accountmenureplyto"
id="accountMenuReplyToInput"
value=""
placeholder="Name <email@example.com> [ ; Name <email@example.com> ]"
/>
</td>
</tr>
<tr id="accountmenuto">
<td>
<label for="accountMenuToInput" id="accountMenuToInputLabel">
__MSG_accounts_defaults_to__
</label>
</td>
<td>
<input
type="text"
name="accountmenuto"
id="accountMenuToInput"
value=""
placeholder="Name <email@example.com> [ ; Name <email@example.com> ]"
/>
</td>
</tr>
@@ -761,6 +780,7 @@
name="accountmenucc"
id="accountMenuCcInput"
value=""
placeholder="Name <email@example.com> [ ; Name <email@example.com> ]"
/>
</td>
</tr>
@@ -776,24 +796,35 @@
name="accountmenubcc"
id="accountMenuBccInput"
value=""
placeholder="Name <email@example.com> [ ; Name <email@example.com> ]"
/>
</td>
</tr>
<tr id="accountmenureplyto">
<tr id="accountmenusubject">
<td>
<label for="accountMenuReplyToInput" id="accountMenuReplyToInputLabel">
__MSG_accounts_defaults_replyto__
</label>
<label>__MSG_accounts_defaults_subject__</label>
</td>
<td>
<input
type="text"
name="accountmenureplyto"
id="accountMenuReplyToInput"
name="accountmenusubject"
id="accountMenuSubjectInput"
value=""
/>
</td>
</tr>
<tr id="accountmenubody">
<td>
<label>__MSG_accounts_defaults_body__</label>
</td>
<td>
<textarea
id="accountMenuBodyTextArea"
rows="8"
>
</textarea>
</td>
</tr>
</table>
<table id="accountmenudialog2">
<tr id="accountmenupgpkey">
@@ -801,10 +832,10 @@
<input
type="checkbox"
name="accountmenupgpkey"
id="accountMenuPgpKey"
id="accountMenuPgpKeyChk"
value=""
/>
<label for="accountMenuPgpKey" id="accountMenuPgpKeyLabel">
<label for="accountMenuPgpKeyChk" id="accountMenuPgpKeyLabel">
__MSG_accounts_defaults_pgp_key__
</label>
</td>
@@ -813,10 +844,10 @@
<input
type="checkbox"
name="accountmenuvcard"
id="accountMenuVCard"
id="accountMenuVCardChk"
value=""
/>
<label for="accountMenuVCard" id="accountMenuVCardLabel">
<label for="accountMenuVCardChk" id="accountMenuVCardLabel">
__MSG_accounts_defaults_vcard__
</label>
</td>
@@ -825,10 +856,10 @@
<input
type="checkbox"
name="accountmenustatnot"
id="accountMenuStatNot"
id="accountMenuStatNotChk"
value=""
/>
<label for="accountMenuStatNot" id="accountMenuStatNotLabel">
<label for="accountMenuStatNotChk" id="accountMenuStatNotLabel">
__MSG_accounts_defaults_stat_not__
</label>
</td>
@@ -837,10 +868,10 @@
<input
type="checkbox"
name="accountmenureturnreceipt"
id="accountMenuReturnReceipt"
id="accountMenuReturnReceiptChk"
value=""
/>
<label for="accountMenuReturnReceipt" id="accountMenuReturnReceiptLabel">
<label for="accountMenuReturnReceiptChk" id="accountMenuReturnReceiptLabel">
__MSG_accounts_defaults_return_receipt__
</label>
</td>
@@ -849,7 +880,7 @@
<div>
<button id="accountMenuBack">__MSG_accounts_defaults_back__</button>
<button id="accountMenuClear">__MSG_accounts_defaults_clear__</button>
<button id="accountMenuSave">__MSG_accounts_defaults_save__</button>
<button id="accountMenuAccept">__MSG_accounts_defaults_accept__</button>
</div>
</div>

View File

@@ -69,7 +69,16 @@ SysTrayX.SaveOptions = {
// Store new message from list
await storage().set({
newMessageFroms: froms,
newMessageFroms: froms,
});
// Store new message defaults list
console.debug("Defaults store: " + JSON.stringify(SysTrayX.Settings.newMessageDefaults));
await storage().set({
newMessageDefaults: JSON.stringify(SysTrayX.Settings.newMessageDefaults),
});
//
@@ -425,6 +434,16 @@ SysTrayX.RestoreOptions = {
SysTrayX.RestoreOptions.onNewMessageFromsError
);
//
// Restore new message defaults
//
await storage()
.get("newMessageDefaults")
.then(
SysTrayX.RestoreOptions.setNewMessageDefaults,
SysTrayX.RestoreOptions.onNewMessageDefaultsError
);
//
// Restore minimize type
//
@@ -1283,11 +1302,11 @@ SysTrayX.RestoreOptions = {
//
setFilters: function (result) {
let filters = result.filters || undefined;
/*
const accounts = document
.getElementById("accountsTree")
.querySelectorAll('input[type="checkbox"][name*="account"]');
*/
// No filters stored?
if (filters === undefined || filters.length === 0) {
// Create default filters
@@ -1367,9 +1386,12 @@ SysTrayX.RestoreOptions = {
setNewMessageFroms: function (result) {
let froms = result.newMessageFroms || [];
const checkboxes = document
const checkboxes = Array.from(document
.getElementById("accountsTree")
.querySelectorAll('input[type="checkbox"][id="account"]');
.querySelectorAll('input[type="checkbox"][id="account"]'));
SysTrayX.Settings.accounts = checkboxes.map((checkbox) => checkbox.name);
SysTrayX.Settings.newMessageFroms = froms;
froms.forEach((from) => {
checkboxes.forEach((checkbox) => {
@@ -1384,6 +1406,25 @@ SysTrayX.RestoreOptions = {
onNewMessageFromsError: function (error) {
console.log(`NewMessageFroms Error: ${error}`);
},
//
// Restore new message defaults callbacks
//
setNewMessageDefaults: function (result) {
let defaults = result.newMessageDefaults || "";
console.debug("Defaults: " + defaults);
if (defaults !== "") {
SysTrayX.Settings.newMessageDefaults = JSON.parse(defaults);
} else {
SysTrayX.Settings.newMessageDefaults = {};
}
},
onNewMessageDefaultsError: function (error) {
console.log(`NewMessageDefaults Error: ${error}`);
},
};
SysTrayX.StorageReset = {
@@ -1618,6 +1659,14 @@ SysTrayX.StorageChanged = {
//
async function start() {
// Define temporary settings storage
SysTrayX.Settings = {
accounts: [],
activeFrom: undefined,
newMessageFroms: [],
newMessageDefaults: {},
};
// Set platform
SysTrayX.Info.platformInfo = await browser.runtime.getPlatformInfo();