
+
Help with a Donation!
+
+
This Add-on is not sponsored in any way by Mozilla.
+ In order to keep the addon working, add-on authors have to raise the funds
+ necessary to repair and rewrite so that our users can keep using
+ the functionality we bring to extend Thunderbird.
+
+
+ At lot of personal time has been put into this. We appreciate if you can support
+ this work by a donation.
+
+
Examples for XNote search queries:
+
+ - xn:subtext
+ - list only emails containing subtext, anywhere in a XNote
+ - xn:subt
+ - list emails containing subtext, anywhere in a XNote. Other words with subt
+ (e.g. subtle) might be
+ found as well.
+ - -xn:subtext
+ - list only emails not containing subtext in a XNote (but having a XNote)
+ - xn:*
+ - list all messages with a XNote
+ - -xn:*
+ - list all messages without XNotes
+ - ^xn:opto
+ - list all messages starting with my nickname, "opto" (all employees, here,
+ start their notes with their name)
+ - ^xn:opto xn:contract
+ - list all messages starting with opto and containing the word contract
+ - ^xn:opto xn:contract f:companyname
+ - list all messages from companyname, which start with opto (written by
+ myself) and the XNote contains the word contract
+ - ^xn:opto age:60 xn:contract f:companyname
+ - as above, but list only emails from the last 60 days.
+
+
+
+
+
Combine the search for XNotes with search/conditions/constraints on: sender, recipient, date, age, filename,
+ attachment, subject, any type of status,
+ other headers and many more search criteria, see the search query builder in Expression Search NG.
+
-
-
-
+
+
+
+
+
+
Use the visual search query builder in Expression search NG (you don't need to remember all these
+ abbreviations: xn:, age:, f:, fromto:, etc.):
+
+
+
+
Or use the search dialog of TB:
+
+
+
Possible additional features, please let me know what can help (and send a donation 😉):
+
a) Fuzzy search: xn:contract will find, typo-resistant: contract, cntract, contrat etc.
+
b) Word oriented: xn:work will find work, working, workaholic, workstation, etc.
+
The three types of search (normal, fuzzy, word oriented) might be selectable by radio buttons in the search
+ query builder.
-
-
Use the visual search query builder in Expression search NG (you don't need to remember all these abbreviations: xn:, age:, f:, fromto:, etc.):
-
-
-
-
Or use the search dialog of TB:
-
-
-
Possible additional features, please let me know what can help (and send a donation 😉):
-
a) Fuzzy search: xn:contract will find, typo-resistant: contract, cntract, contrat etc.
-
b) Word oriented: xn:work will find work, working, workaholic, workstation, etc.
-
The three types of search (normal, fuzzy, word oriented) might be selectable by radio buttons in the search
- query builder.
-
-
New/Hidden Features
+
New/Hidden Features
-
Version 3.3.3:
-
Keyboard operation: TB 102+: Alt+M creates a note or toggles its display. If you are in the XNote window, close it by esc, which saves the note. Choose command letters
+
+
Version 3.3.3:
+
Keyboard operation: TB 102+: Alt+M creates a note or toggles its display. If you are in the XNote window, close
+ it by esc, which saves the note. Choose command letters
in addon manager, using the cog icon.
-
If you choose not to display the xnote window and only the xnote inside the messagedisplay, then Alt-M opens the xnote popup window for edit, and esc closes it.
+
If you choose not to display the xnote window and only the xnote inside the messagedisplay, then Alt-M opens
+ the xnote popup window for edit, and esc closes it.
+
+
Bugfixes: hide note on folder change and tab change. Hide note if Quickfilter hides the corresponding message.
-
Bugfixes: hide note on folder change and tab change. Hide note if Quickfilter hides the corresponding message.
-
Update for TB 102:
-
A lot of changes and code simplification were done. Very special thanks is given to John Bieling for his assistance.
-
Bookmark XNotes:
-
If the bookmarks addon is installed, XNotes can be bookmarked (by Icon in XNote window).They are then shown in a special toolbar
+
+
Update for TB 102:
+
A lot of changes and code simplification were done. Very special thanks is given to John Bieling for his
+ assistance.
+
+
Bookmark XNotes:
+
If the bookmarks addon is installed, XNotes can be bookmarked (by Icon in XNote window).They are then shown in a
+ special toolbar
and can be quickly jumped to, independent of the folder currently displayed.
-
Show note summary in messagedisplay:
+
Show note summary in messagedisplay:
The messagedisplay can show the first 350 characters of the XNote. The display combines the first 175 chars,
followed by ... and the last 175 chars, while linefeeds are removed.
If note display in a window is disabled, this allows to scroll through the messagetree by up, down or mouse. For
@@ -111,7 +160,8 @@
Repeatedly clicking the button in the toolbar toggles the display of the note.
Preview notes on mouseover:
-
If you display the {addon} column and widen it, so that the three dots are shown for a note,
+
If you display the column and widen it, so that the three dots
+ are shown for a note,
but no text: then, on mouseover/hover, a little window will show the note text. The message does not need to be
selected.
This can be used to get a fast overview over all notes indicated in the messagelist.
@@ -123,7 +173,8 @@
'context menu' key, which can be used instead of shift+F10
Set note position on screen:
-
{addon} now allows to set the standard screen position for notes in the settings. It is even possible to
+
now allows to set the standard screen position for notes in the
+ settings. It is even possible to
choose a position outside of the main TB window. So the note will no longer cover parts of the TB window.
diff -Nru xnote-4.5.48/popup/installed.js xnote-4.10.31/popup/installed.js
--- xnote-4.5.48/popup/installed.js 2023-09-22 21:00:30.000000000 +0000
+++ xnote-4.10.31/popup/installed.js 2026-08-07 14:48:42.000000000 +0000
@@ -8,14 +8,9 @@
//console.log("donate link");
messenger.tabs.create({url:"https://addons.thunderbird.net/thunderbird/addon/expression-search-ng/"});
}
+ if (event.target.id.startsWith("textinsert")) {
+ //console.log("donate link");
+ messenger.tabs.create({url:"https://addons.thunderbird.net/thunderbird/addon/text-insert-text-blocks/"});
+ }
});
-addEventListener("load", async (event) => {
- // debugger;
- let text = document.body.innerHTML,
- htmltext = text.replace(/{addon}/g, await browser.runtime.getManifest().name);
- htmltext2 = htmltext.replace(/{version}/g, await browser.runtime.getManifest().version);
- let browserInfo = await browser.runtime.getBrowserInfo()
- htmltext = htmltext2.replace(/{appver}/g, browserInfo.version);
- document.body.innerHTML = htmltext;
-});
\ No newline at end of file
diff -Nru xnote-4.5.48/popup/update.html xnote-4.10.31/popup/update.html
--- xnote-4.5.48/popup/update.html 2025-02-18 21:21:32.000000000 +0000
+++ xnote-4.10.31/popup/update.html 2026-07-26 13:27:36.000000000 +0000
@@ -7,29 +7,37 @@
Welcome to the update for XNote++
+
-
{addon} Updated
-
Thank you for updating {addon}. You are now running version {version} on Thunderbird
- {appver}.
+
Updated
+
Thank you for updating . You are now running version on Thunderbird
+ .
+
Add text from templates
+
+
Update XNotes from a shared directory (ctrl alt t)
+
XNote Column now also displayed in search results:And for searching for text in XNotes to get the associated email: use Expression Search NG addon
+
Use templates in XNotes:
+
You can now insert templates into the XNote. Shortcut followed by ctrl-d can enter predefined text/templates into the XNote. Define the shortcuts
+ and text/templates in the Text Insert addon:Text Insert addon
-
-
Fulltext search with constraints
-
+
+
Bugfix: Resize/reposition XNotes, fix print note
XNote column:
You need to activate this column in the column picker and shift it to the position where you want it displayed.
Hovering over the abbreviated XNote column then displays the full XNote in a tooltip.
-
+
+
Fulltext search with constraints
Search XNotes (v 3.5.5):
Together with the addon Expression Search NG, XNote++ now offers a fulltext search over all XNotes, either in the emails
displayed in the current messagelist,
@@ -137,7 +145,7 @@
Repeatedly clicking the button in the toolbar toggles the display of the note.
Preview notes on mouseover:
-
If you display the {addon} column and widen it, so that the three dots are shown for a note,
+
If you display the column and widen it, so that the three dots are shown for a note,
but no text: then, on mouseover/hover, a little window will show the note text. The message does not need to be
selected.
This can be used to get a fast overview over all notes indicated in the messagelist.
@@ -149,7 +157,7 @@
'context menu' key, which can be used instead of shift+F10
Set note position on screen:
-
{addon} now allows to set the standard screen position for notes in the settings. It is even possible to
+
now allows to set the standard screen position for notes in the settings. It is even possible to
choose a position outside of the main TB window. So the note will no longer cover parts of the TB window.
diff -Nru xnote-4.5.48/popup/update.js xnote-4.10.31/popup/update.js
--- xnote-4.5.48/popup/update.js 2023-09-22 21:00:30.000000000 +0000
+++ xnote-4.10.31/popup/update.js 2026-08-07 14:48:50.000000000 +0000
@@ -8,17 +8,13 @@
//console.log("donate link");
messenger.tabs.create({url:"https://addons.thunderbird.net/thunderbird/addon/expression-search-ng/"});
}
+ if (event.target.id.startsWith("textinsert")) {
+ //console.log("donate link");
+ messenger.tabs.create({url:"https://addons.thunderbird.net/thunderbird/addon/text-insert-text-blocks/"});
+ }
});
-addEventListener("load", async (event) => {
- // debugger;
- let text = document.body.innerHTML;
- htmltext = text.replace(/{addon}/g, await browser.runtime.getManifest().name);
- htmltext2 = htmltext.replace(/{version}/g, await browser.runtime.getManifest().version);
- let browserInfo = await browser.runtime.getBrowserInfo()
- htmltext = htmltext2.replace(/{appver}/g, browserInfo.version);
- document.body.innerHTML = htmltext;
-});
+
diff -Nru xnote-4.5.48/scripts/listener.js xnote-4.10.31/scripts/listener.js
--- xnote-4.5.48/scripts/listener.js 2025-02-17 23:33:02.000000000 +0000
+++ xnote-4.10.31/scripts/listener.js 2025-09-30 10:55:16.000000000 +0000
@@ -7,7 +7,7 @@
*/
window.document.addEventListener("click", async (event) => {
-//debugger;
+ //debugger;
if (event.target.tagName == "A") {
if (event.target.dataset.externalHref) {
event.preventDefault();
@@ -18,13 +18,13 @@
event.preventDefault();
event.stopPropagation();
let [url, anchor] = event.target.dataset.windowHref.split("#");
- messenger.windows.create({type: "popup", url: translateURL(url, anchor)});
+ messenger.windows.create({ type: "popup", url: translateURL(url, anchor) });
}
if (event.target.dataset.tabHref) {
event.preventDefault();
event.stopPropagation();
let [url, anchor] = event.target.dataset.tabHref.split("#");
- messenger.tabs.create({ url: translateURL(url, anchor)});
+ messenger.tabs.create({ url: translateURL(url, anchor) });
}
@@ -32,33 +32,37 @@
}
if (event.target.id.startsWith("addon")) {
//console.log("ev", event);
- messenger.tabs.create({ url: event.target.value });
- };
+ messenger.tabs.create({ url: event.target.value });
+ };
});
window.addEventListener("unload", async (event) => {
// console.log("pop close");
- let rep = window.document.getElementById("repeat");
+ let rep = window.document.getElementById("repeat");
// console.log("rep", rep);
- if (rep.checked) {
- // console.log("checked");
- await messenger.runtime.sendMessage({command:"stopDonPopup"});
- };
- });
-
-
+ if (rep.checked) {
+ // console.log("checked");
+ await messenger.runtime.sendMessage({ command: "stopDonPopup" });
+ };
+});
+
+
window.document.addEventListener("DOMContentLoaded", async (event) => {
// Replace keywords.
let browserInfo = await browser.runtime.getBrowserInfo();
- let text = document.body.innerHTML
- .replace(/{addon}/g, await browser.runtime.getManifest().name)
- .replace(/{version}/g, await browser.runtime.getManifest().version)
- .replace(/{appver}/g, browserInfo.version);
- document.body.innerHTML = text;
+ const REPLACE_VALUES = {
+ localizedName: browser.runtime.getManifest().name,
+ version: browser.runtime.getManifest().version,
+ appver: await browser.runtime.getBrowserInfo().then(info => info.version),
+ }
+
+ document.querySelectorAll("[data-to-be-replaced]").forEach(el => {
+ el.textContent = REPLACE_VALUES[el.dataset.toBeReplaced]
+ });
// Localize.
i18n.updateDocument();
diff -Nru xnote-4.5.48/xn-background.js xnote-4.10.31/xn-background.js
--- xnote-4.5.48/xn-background.js 2025-03-27 14:38:16.000000000 +0000
+++ xnote-4.10.31/xn-background.js 2026-09-07 08:52:02.000000000 +0000
@@ -32,6 +32,7 @@
xnote.currentDisplayedMessage = -1;
var xnoteSyncTest = {};
+let msg;
@@ -63,6 +64,19 @@
for (let i = 0; i < 500; i++) {
try {
res = await messenger.xnoteapi.isExperimentReady();
+ // res &= await messenger.searchWindow.isExperimentReady();
+ }
+
+ catch (ev) { };
+ // console.log("notif exp", i, res);
+ if (res) break;
+ await wait(100);
+ };
+
+ for (let i = 0; i < 500; i++) {
+ try {
+ // res = await messenger.xnoteapi.isExperimentReady();
+ res = await messenger.searchWindow.isExperimentReady();
}
catch (ev) { };
@@ -266,8 +280,33 @@
};
messenger.NotifyTools.onNotifyBackground.addListener(async (info) => {
+ // let msg;
switch (info.command) {
+ case "getShortcut":
+ let shortCut = "";
+ let msg11 = {};
+ let res;
+ msg11 = {
+ command: "getReplacement",
+ key: info.key
+ };
+ // console.log("key", info);
+ try {
+ res = await browser.runtime.sendMessage(
+ "textinsert@opto-one",
+ msg11
+ );
+ }
+
+ catch (ev) { };
+ // console.log("try contact text insert", res);
+ if (res) {
+ // console.log("Replacement", res);
+ shortCut = res;
+ };
+ return shortCut;
+ break;
case "closeNote":
@@ -421,6 +460,37 @@
});
+
+async function getXNotesFromNewDirectory() {
+ await clearLocalStorageFromXNotes();
+ await getOldXNotesOneByOne();
+ // console.log("send stor to ES");
+ // alert("fetched messages, now send to ES");
+ try {
+ answ = messenger.runtime.sendMessage("expressionsearch@opto.one", { command: "setXNoteInstalled" });
+ }
+ catch (e) {
+ };
+
+};
+
+async function clearLocalStorageFromXNotes() {
+ // debugger;
+ for (let i = 0; i < xnoteKeys.length; i++) {
+ await messenger.storage.local.remove(xnoteKeys[i].toString());
+ //!! should be untagged as well
+ // convert hdrMsgId to msgId await updateXNoteTag(xnoteKeys[i].toString(), true);
+ // xnoteKeys = xnoteKeys.filter(item => item !== xnoteKeys[i].toString());
+ };
+ xnoteKeys = [];
+
+ await messenger.storage.local.set({ "keys": xnoteKeys });
+ xnote.text = "";
+ // xnote.date = xnote1.date;
+ await messenger.storage.local.set({ "xnote": xnote }); //to forward to messagedisplayscript
+
+};
+
async function addToDB(msgKey) {
let note = await browser.xnoteapi.getXNoteFromMsgKey(msgKey);
if (!note) return;
@@ -442,7 +512,7 @@
// debugger;
let notesk = await browser.xnoteapi.getAllXNoteKeys();
// console.log("fetch old xnotes", notesk.keys.length, notesk.keys, typeof notesk.keys, Array.isArray(notesk.keys));
- for (let i = 0; i < notesk.keys.length; i++) addToDB(notesk.keys[i]);
+ for (let i = 0; i < notesk.keys.length; i++) addToDB(notesk.keys[i]);//adds key and note
/**/
//set pref
@@ -461,7 +531,9 @@
let notesk = await browser.xnoteapi.getAllXNotesFromDirectory();
// console.log("fetch old xnotes", notesk);
/**/
- notesk.all.forEach(async element => {
+ //notesk.all.forEach(async element =>
+
+ for (let element of notesk.all) {
let cc = { [element[0]]: element[1] };
await messenger.storage.local.set(cc);
@@ -469,7 +541,7 @@
xnoteKeys.push(element[0]);
await messenger.storage.local.set({ "keys": xnoteKeys });
};
- });
+ };
//set pref
preferenceCache["fetched_old_XNotes"] = true;
let prefs = preferenceCache;
@@ -503,16 +575,129 @@
let windows = await browser.windows.getAll({ windowTypes: ["normal"] });
for (let win of windows) {
let activeTabs = await messenger.tabs.query({ active: true, windowId: win.id });
+// let mTabs = await messenger.mailTabs.query({ windowId: win.id });
+ let mTabs = await messenger.tabs.query({ windowId: win.id, type:"mail" });
+
+ for (let k = 0; k < mTabs.length; k++) {
+ // messenger.xnoteapi.addPreviewIntoTree(mTabs[k].tabId);
+ messenger.xnoteapi.addPreviewIntoTree(mTabs[k].id);
+ };
if (activeTabs.length == 1) {
- onSafeActivated({ tabId: activeTabs[0].id, windowId: activeTabs[0].windowId });
+ // onSafeActivated({ tabId: activeTabs[0].id, windowId: activeTabs[0].windowId });
} else {
console.error(`Did not find exactly one active tab in window ${win.id}:`, activeTabs);
}
}
}
+async function createXNoteFromContext(info, tab) {
+ let msg = info.selectedMessages.messages[0];
+ let xnote_displayed = await messenger.xnoteapi.hasOpenNoteWindow(tab.windowId);
+ if (xnote_displayed) {
+ // let message = await browser.messageDisplay.getDisplayedMessage(tab.id);
+ // console.log("messDispl1", tab);
+ messenger.xnoteapi.closeNoteWindow(tab.windowId);
+ }
+ await messenger.xnoteapi.contextCreateNote(tab.windowId, true, msg.headerMessageId, msg.id);
+
+};
+
+async function modifyXNoteFromContext(info, tab) {
+ let msg = info.selectedMessages.messages[0];
+ let xnote_displayed = await messenger.xnoteapi.hasOpenNoteWindow(tab.windowId);
+ if (xnote_displayed) {
+ // let message = await browser.messageDisplay.getDisplayedMessage(tab.id);
+ // console.log("messDispl1", tab);
+ messenger.xnoteapi.closeNoteWindow(tab.windowId);
+ }
+ await messenger.xnoteapi.contextModifyNote(tab.windowId, false, true, msg.headerMessageId, msg.id);
+}
+
+async function deleteXNoteFromContext(info, tab) {
+ let msg = info.selectedMessages.messages[0];
+ let xnote_displayed = await messenger.xnoteapi.hasOpenNoteWindow(tab.windowId);
+ if (xnote_displayed) {
+ // let message = await browser.messageDisplay.getDisplayedMessage(tab.id);
+ // console.log("messDispl1", tab);
+ messenger.xnoteapi.closeNoteWindow(tab.windowId);
+ }
+ messenger.xnoteapi.deleteXNoteFromMsgKey(msg.headerMessageId);
+ //updateXNoteTag(msg.id, true);
+
+ //delete tag on all copies of msg
+ let msgs = await messenger.messages.query({ "headerMessageId": msg.headerMessageId });//await
+ if (msgs.messages.length) {
+ let deleted = true;
+ for (let i = 0; i < msgs.messages.length; i++) {
+ updateXNoteTag(msgs.messages[i].id, deleted);
+ };
+ };
+
+
+ //update localstorage, expressionsearch, sync
+ await messenger.storage.local.remove(msg.headerMessageId.toString());
+ xnoteKeys = xnoteKeys.filter(item => item !== msg.headerMessageId.toString());
+ await messenger.storage.local.set({ "keys": xnoteKeys });
+ xnote.text = "";
+ // xnote.date = xnote1.date;
+ await messenger.storage.local.set({ "xnote": xnote }); //to forward to messagedisplayscript
+
+ let msgD = { command: "deleteXnote", xnoteKeys: xnoteKeys, hdrMsgId: msg.headerMessageId };
+ try {
+ let respD = await browser.runtime.sendMessage(
+ "expressionsearch@opto.one",
+ msgD
+ );
+ } catch (ev) { };
+
+
+ try {
+ let resp = await browser.runtime.sendMessage(
+ "sync@opto.one",
+ msgD
+ );
+ } catch (ev) { console.log("syncdel", ev); };
+};
+
+
+
+
+browser.menus.create({
+ id: "xnote-mailContext-xNote",
+ title: "XNote",
+ // onclick: hdrToolsLog,
+ contexts: ["message_list"]
+});
+
+browser.menus.create({
+ id: "xnote-context-create",
+ parentId: "xnote-mailContext-xNote",
+ title: "Create XNote",
+ onclick: createXNoteFromContext,
+ contexts: ["message_list"]
+});
+
+browser.menus.create({
+ id: "xnote-context-modify",
+ parentId: "xnote-mailContext-xNote",
+ title: "Edit XNote",
+ onclick: modifyXNoteFromContext,
+ contexts: ["message_list"]
+});
+
+browser.menus.create({
+ id: "xnote-context-delete",
+ parentId: "xnote-mailContext-xNote",
+ title: "Delete XNote",
+ onclick: deleteXNoteFromContext,
+ contexts: ["message_list"]
+});
+
+
+/**/
+
//var portFromBookmarks = null;
async function main() {
// await wait(1000); //to allow rsourceurl to be created
@@ -549,6 +734,8 @@
await browser.xnoteapi.setPreferences(preferenceCache);
await browser.xnoteapi.init();
+ await browser.searchWindow.loadXNoteJSM();
+ await browser.searchWindow.init();
messenger.WindowListener.registerWindow(
"chrome://messenger/content/messenger.xhtml",
@@ -556,11 +743,8 @@
"chrome/content/scripts/xn-xnote-overlay.js"
);
- messenger.WindowListener.registerWindow(
- // "chrome://messenger/content/messenger.xhtml",
- "about:3pane",
- "chrome/content/scripts/xn-xnote-aboutOverlay.js"
- );
+
+
await messenger.WindowListener.startListening();
@@ -613,26 +797,66 @@
messenger.xnoteapi.closeNoteWindow(tab.windowId);
xnote.text = "";
};
+ if (tab.type == "mail") {
+ let add = function () {messenger.xnoteapi.addPreviewIntoTree(tab.id)};
+ setTimeout(add, 800);
+ ;
+ };
+ });
+
+ messenger.tabs.onActivated.addListener((info) => {
+ // console.log("created tabname", tab.title);
+ // if (!tab.mailTab)
+ if (true) {
+ messenger.xnoteapi.closeNoteWindow(info.windowId);
+ xnote.text = "";
+ };
});
+ async function adjustContextMenu(info, tab) {
+ // console.log("shown", info, tab);
+ if (info.menuIds.includes("xnote-mailContext-xNote")) {
+ if (info.selectedMessages.messages.length > 1) {
+ messenger.menus.update("xnote-mailContext-xNote", { enabled: false })
+ };
+ if (info.selectedMessages.messages.length == 1) {
+ messenger.menus.update("xnote-mailContext-xNote", { enabled: true });
+ let hasXNote = await messenger.xnoteapi.getXNote(info.selectedMessages.messages[0].id);
+ if (hasXNote.text != "") {
+ messenger.menus.update("xnote-context-modify", { enabled: true });
+ messenger.menus.update("xnote-context-create", { enabled: false });
+ messenger.menus.update("xnote-context-delete", { enabled: true });
+ } else {
+ messenger.menus.update("xnote-context-modify", { enabled: false });
+ messenger.menus.update("xnote-context-create", { enabled: true });
+ messenger.menus.update("xnote-context-delete", { enabled: false });
+ }
+ }
+ }
+ }
messenger.mailTabs.onDisplayedFolderChanged.addListener(removeNoteOnFolderChange);
messenger.mailTabs.onSelectedMessagesChanged.addListener(removeNoteOnFolderChange);
+ // messenger.menus.onShown.addListener(adjustContextMenu);
browser.browserAction.onClicked.addListener(async (tab, info) => {
if (info.modifiers.includes("Shift")) {
- // console.log("Shift");
- let message = await browser.messageDisplay.getDisplayedMessage(tab.id)
- let xnote1 = await messenger.xnoteapi.getXNote(message.id);
-
- xnoteSyncTest = await messenger.xnoteapi.getXNoteFromMsgKey(message.headerMessageId);
- // console.log("XNote", xnote1, xnoteSyncTest, message, xnoteSyncTest.note);
- let actTab = await messenger.mailTabs.getCurrent();
- let selFolders = await messenger.mailTabs.getSelectedFolders(actTab.id);
- if (selFolders.length);
- // messenger.ExpressionSearchTools.openSearchInTab(selFolders[0].accountId, selFolders[0].path); // use first selected folder
+ /*
+ //will be coming
+ //
+ // // console.log("Shift");
+ let message = await browser.messageDisplay.getDisplayedMessage(tab.id)
+ let xnote1 = await messenger.xnoteapi.getXNote(message.id);
+
+ xnoteSyncTest = await messenger.xnoteapi.getXNoteFromMsgKey(message.headerMessageId);
+ // console.log("XNote", xnote1, xnoteSyncTest, message, xnoteSyncTest.note);
+ let actTab = await messenger.mailTabs.getCurrent();
+ // let selFolders = await messenger.mailTabs.getSelectedFolders(actTab.id);
+ if (selFolders.length);
+ // messenger.ExpressionSearchTools.openSearchInTab(selFolders[0].accountId, selFolders[0].path); // use first selected folder
+ */
} else {
if (info.modifiers.includes("Alt")) {
// console.log("Shift");
@@ -752,23 +976,33 @@
});
+ async function handleXNoteRequest(message) {
+ // console.log("hdr", message.hdrID);
+ let note = await messenger.storage.local.get(message.hdrID);
+ // console.log("note", note);
+ return JSON.stringify(note);
+ }
/**/
// console.log("before messageExternal");
- messenger.runtime.onMessageExternal.addListener(async (message, sender, sendResponse) => {
+ messenger.runtime.onMessageExternal.addListener((message, sender, sendResponse) => {
+ // messenger.runtime.onMessageExternal.addListener(async (message, sender, sendResponse) => {
// console.log("in messageExternal", message, sender);
- if (sender.id === "expressionsearch@opto.one") {
+ if ((sender.id === "expressionsearch@opto.one")) {
if (message.command == "getXnote") {
- // console.log("hdr", message.hdrID);
- let note = await messenger.storage.local.get(message.hdrID);
- // console.log("note", note);
+ /*
+ // console.log("hdr", message.hdrID);
+ // let note = await messenger.storage.local.get(message.hdrID);
+ let note = messenger.storage.local.get(message.hdrID);
+ // console.log("note", note);
return note;
-
+*/
+ return handleXNoteRequest(message, sender);
};
- if (message.command == "getXnoteDir") {
+ if (message.command == "getXnoteDir") { //seems not in use 260203
//console.log("prefs", getPreferences().storage_path);
// console.log("note", note);
@@ -780,19 +1014,48 @@
if (message.command == "getAllXNotes") {
// let notes = await messenger.storage.local.get(null);
- let keys = await messenger.storage.local.get("keys");
- // console.log("keys", keys);
- let all = {};
- // let one = {};
- for (let i = 0; i < keys.keys.length; i++) {
- let key = keys.keys[i];
- let elem = await messenger.storage.local.get(key);
- // console.log("key", key, "elem", elem);
- // console.log("elkey", elem[key]);
- all[key] = elem[key];
- };
- // console.log("all", notes, "onebyone", all );
- return all;
+
+ let keys = messenger.storage.local.get("keys").then(async (keys) => {
+ // console.log("keys", keys);
+ let all = {};
+ if (keys?.keys) {
+ for (let i = 0; i < keys.keys.length; i++) {
+ let key = keys.keys[i];
+ let elem = await messenger.storage.local.get(key);//await
+ // console.log("key", key, "elem", elem);
+ // console.log("elkey", elem[key]);
+ all[key] = elem[key];
+ };
+ };
+ sendResponse(all);
+
+
+ });
+ /*
+
+ let keys = messenger.storage.local.get("keys");//await
+ // console.log("keys", keys);
+ let all = {};
+ // let one = {};
+ /*
+ for (let i = 0; i < keys.keys.length; i++) {
+ let key = keys.keys[i];
+ let elem = await messenger.storage.local.get(key);//await
+ // console.log("key", key, "elem", elem);
+ // console.log("elkey", elem[key]);
+ all[key] = elem[key];
+ };
+
+ */
+ /*
+ let elems = messenger.storage.local.get(null); //get all, also holds prefs etc.
+ // console.log("all", notes, "onebyone", all );
+ // console.log("all", elems, "keys", keys );
+ all["keys"] = keys;
+ all["elems"]= elems;
+ // console.log("all1", all );
+ */
+ return true;//"all";
};
@@ -800,10 +1063,31 @@
};
+ if (sender.id === "topic-tree@opto-one") {
+ if (message.command == "getMsgId") {
+ // console.log("hdridr", message.uri);
+ let msgId = messenger.xnoteapi.getMsgId(message.uri);
+ // console.log("msgId", msgId);
+ return msgId;
+
+ };
+ if (message.command == "getXnote") {
+ /*
+ // console.log("hdr", message.hdrID);
+ // let note = await messenger.storage.local.get(message.hdrID);
+ let note = messenger.storage.local.get(message.hdrID);
+ // console.log("note", note);
+ return note;
+*/
+ return handleXNoteRequest(message, sender);
+ };
+
+ };
+
if (sender.id === "sync@opto.one") {
if (message.command == "getXnote") {
// console.log("hdr", message.hdrID);
- let note = await messenger.storage.local.get(message.hdrID);
+ let note = messenger.storage.local.get(message.hdrID);//await
// console.log("note", note);
return note;
@@ -811,7 +1095,7 @@
if (message.command == "isXnoteReady") {
// console.log("hdr", message.hdrID);
- await waitForExperiment();
+ waitForExperiment();//await
// console.log("note", note);
return true;
@@ -833,7 +1117,7 @@
if (!message.deleted) messenger.xnoteapi.syncXNote(message.hdrMsgId, message.note);
else messenger.xnoteapi.deleteXNoteFromMsgKey(message.hdrMsgId);
//display or change tag
- let msgs = await messenger.messages.query({ "headerMessageId": message.hdrMsgId });
+ let msgs = messenger.messages.query({ "headerMessageId": message.hdrMsgId });//await
if (msgs.messages.length) {
for (let i = 0; i < msgs.messages.length; i++) {
updateXNoteTag(msgs.messages[i].id, message.deleted);
@@ -847,7 +1131,7 @@
if (message.command == "getAllXNotesToSync") {
// let notes = await messenger.storage.local.get(null);
//get it from XNote directory
- let notesk = await browser.xnoteapi.getAllXNotesFromDirectory();
+ let notesk = browser.xnoteapi.getAllXNotesFromDirectory();//await
/*
//get it from storage,local
@@ -875,7 +1159,7 @@
if (message.command == "getAllXNoteKeysToSync") {
// let notes = await messenger.storage.local.get(null);
//get it from XNote directory
- let notesk = await browser.xnoteapi.getAllXNoteKeys();
+ let notesk = browser.xnoteapi.getAllXNoteKeys();//await
/*
//get it from storage,local
@@ -904,7 +1188,7 @@
if (message.command == "getXNoteFromMsgKey") {
// let notes = await messenger.storage.local.get(null);
//get it from XNote directory
- let note = await browser.xnoteapi.getXNoteFromMsgKey(message.hdrMsgId);
+ let note = browser.xnoteapi.getXNoteFromMsgKey(message.hdrMsgId);//await
/*
//get it from storage,local
@@ -931,7 +1215,7 @@
};
};
-
+ return false;
});
@@ -1048,7 +1332,8 @@
}
};
if (command === "getOldXNotes") {
- getOldXNotes();
+ //getOldXNotes();
+ await getXNotesFromNewDirectory();
// console.log("getOldXNotes");
/* let xnote_displayed = await messenger.xnoteapi.hasOpenNoteWindow(tab.windowId);
// console.log("commandx", xnote_displayed);
@@ -1095,3 +1380,11 @@
}
main().catch(console.error);
+
+
+/*
+ messenger.windows.onCreated.addListener(async (window) => {
+// console.log(" Wnd created", window);
+
+ });
+ */