xi-conversations

Minimal clone of thunderbird conversations
git clone https://git.ce9e.org/xi-conversations.git

commit
6f7c2771b6b0b1873c43f173e996ba1f9522cf51
parent
27b0bacda80451686ee2b137b78df751ba63b773
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-10-04 19:52
tb115: adapt monkeypatch

Diffstat

M background.js 12 +++++++++++-
M experiment-api/api.js 52 ++++++++++++++++++++++++++--------------------------
M experiment-api/schema.json 9 ++++++---
M manifest.json 3 ++-

4 files changed, 45 insertions, 31 deletions


diff --git a/background.js b/background.js

@@ -1,3 +1,13 @@
    1     1 /* global browser */
    2     2 
    3    -1 browser.xi.patchOpenSelectedMessages();
   -1     3 browser.tabs.onCreated.addListener(tab => {
   -1     4 	if (tab.mailTab) {
   -1     5 		browser.xi.patchTab(tab.id);
   -1     6 	}
   -1     7 });
   -1     8 
   -1     9 browser.tabs.query({mailTab: true}).then(tabs => {
   -1    10 	tabs.forEach(tab => {
   -1    11 		browser.xi.patchTab(tab.id);
   -1    12 	});
   -1    13 });

diff --git a/experiment-api/api.js b/experiment-api/api.js

@@ -18,6 +18,16 @@ var unique = function(l, keyFn) {
   18    18 	});
   19    19 };
   20    20 
   -1    21 var waitForLoad = function(win) {
   -1    22 	return new Promise(resolve => {
   -1    23 		if (win.document.readyState === 'complete') {
   -1    24 			resolve();
   -1    25 		} else {
   -1    26 			win.addEventListener('load', resolve);
   -1    27 		}
   -1    28 	});
   -1    29 };
   -1    30 
   21    31 var getConversation = function(ids) {
   22    32 	return new Promise((resolve, reject) => {
   23    33 		var conversationListener = {
@@ -91,32 +101,22 @@ var xi = class extends ExtensionCommon.ExtensionAPI {
   91   101 						{URL: url},
   92   102 					);
   93   103 				},
   94    -1 				// cannot be replaced by messageDisplay.OnMessagesDisplayed because
   95    -1 				// we need to replace the original handler
   96    -1 				patchOpenSelectedMessages() {
   97    -1 					var observer = (win, topic) => {
   98    -1 						if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') {
   99    -1 							win.MsgOpenSelectedMessages = () => {
  100    -1 								var msgs = win.gFolderDisplay.selectedMessages;
  101    -1 								var ids = msgs.map(msgHdr => msgHdr.messageId);
  102    -1 								var url = '/content/main.html?ids=' + encodeURIComponent(ids);
  103    -1 								var tab = win.openTab('contentTab', {
  104    -1 									url: context.uri.resolve(url),
  105    -1 									linkHandler: 'single-page',
  106    -1 									principal: context.extension.principal,
  107    -1 								});
  108    -1 								tab.toolbar.hidden = true;
  109    -1 							};
  110    -1 						}
  111    -1 						win.addEventListener('load', () => observer(win, topic));
  112    -1 					};
  113    -1 
  114    -1 					Services.ww.registerNotification(observer);
  115    -1 
  116    -1 					var e = Services.ww.getWindowEnumerator();
  117    -1 					while (e.hasMoreElements()) {
  118    -1 						observer(e.getNext(), 'domwindowopened');
  119    -1 					}
   -1   104 				patchTab(id) {
   -1   105 					var tabObject = context.extension.tabManager.get(id);
   -1   106 					var win = tabObject.nativeTab.chromeBrowser.contentWindow;
   -1   107 					return waitForLoad(win).then(() => {
   -1   108 						win.threadPane._onItemActivate = () => {
   -1   109 							var msgs = win.gDBView.getSelectedMsgHdrs();
   -1   110 							var ids = msgs.map(msgHdr => msgHdr.messageId);
   -1   111 							var url = '/content/main.html?ids=' + encodeURIComponent(ids);
   -1   112 							var tab = win.openTab('contentTab', {
   -1   113 								url: context.uri.resolve(url),
   -1   114 								linkHandler: 'single-page',
   -1   115 								principal: context.extension.principal,
   -1   116 							});
   -1   117 							tab.toolbar.hidden = true;
   -1   118 						};
   -1   119 					});
  120   120 				},
  121   121 			},
  122   122 		};

diff --git a/experiment-api/schema.json b/experiment-api/schema.json

@@ -28,9 +28,12 @@
   28    28 			"type": "integer"
   29    29 		}]
   30    30 	}, {
   31    -1 		"name": "patchOpenSelectedMessages",
   -1    31 		"name": "patchTab",
   32    32 		"type": "function",
   33    -1 		"async": false,
   34    -1 		"parameters": []
   -1    33 		"async": true,
   -1    34 		"parameters": [{
   -1    35 			"name": "id",
   -1    36 			"type": "integer"
   -1    37 		}]
   35    38 	}]
   36    39 }]

diff --git a/manifest.json b/manifest.json

@@ -17,7 +17,8 @@
   17    17   "permissions": [
   18    18     "accountsRead",
   19    19     "messagesRead",
   20    -1     "messagesMove"
   -1    20     "messagesMove",
   -1    21     "tabs"
   21    22   ],
   22    23   "experiment_apis": {
   23    24     "xi": {