xi-conversations

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

commit
baf9eba88adbc403e76363ab1784acdc60c6fb4e
parent
1e16af11062670a908eda93379f8be889be3686e
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2022-12-23 14:45
combine onOpenTab and createTab

Diffstat

M background.js 4 +---
M experiment-api/api.js 50 ++++++++++++++++++++++----------------------------
M experiment-api/schema.json 18 ++----------------

3 files changed, 25 insertions, 47 deletions


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

@@ -1,5 +1,3 @@
    1     1 /* global browser */
    2     2 
    3    -1 browser.xi.onOpenTab.addListener(ids => {
    4    -1 	browser.xi.createTab('/content/main.html?ids=' + encodeURIComponent(ids));
    5    -1 });
   -1     3 browser.xi.patchOpenSelectedMessages();

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

@@ -79,38 +79,32 @@ var xi = class extends ExtensionCommon.ExtensionAPI {
   79    79 					var uri = msgHdr.folder.getUriForMsg(msgHdr);
   80    80 					win.ViewPageSource([uri]);
   81    81 				},
   82    -1 				createTab(url) {
   83    -1 					var win = Services.wm.getMostRecentWindow('mail:3pane');
   84    -1 					win.openTab('contentTab', {
   85    -1 						url: context.uri.resolve(url),
   86    -1 						linkHandler: 'single-page',
   87    -1 						principal: context.extension.principal,
   88    -1 					});
   89    -1 				},
   90    82 				// cannot be replaced by messageDisplay.OnMessagesDisplayed because
   91    83 				// we need to replace the original handler
   92    -1 				onOpenTab: new ExtensionCommon.EventManager({
   93    -1 					context,
   94    -1 					name: 'xi.onOpenTab',
   95    -1 					register(fire) {
   96    -1 						var observer = (win, topic) => {
   97    -1 							if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') {
   98    -1 								win.MsgOpenSelectedMessages = () => {
   99    -1 									var msgs = win.gFolderDisplay.selectedMessages;
  100    -1 									fire.async(msgs.map(msgHdr => msgHdr.messageId));
  101    -1 								};
  102    -1 							}
  103    -1 							win.addEventListener('load', () => observer(win, topic));
  104    -1 						};
   -1    84 				patchOpenSelectedMessages() {
   -1    85 					var observer = (win, topic) => {
   -1    86 						if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') {
   -1    87 							win.MsgOpenSelectedMessages = () => {
   -1    88 								var msgs = win.gFolderDisplay.selectedMessages;
   -1    89 								var ids = msgs.map(msgHdr => msgHdr.messageId);
   -1    90 								var url = '/content/main.html?ids=' + encodeURIComponent(ids);
   -1    91 								win.openTab('contentTab', {
   -1    92 									url: context.uri.resolve(url),
   -1    93 									linkHandler: 'single-page',
   -1    94 									principal: context.extension.principal,
   -1    95 								});
   -1    96 							};
   -1    97 						}
   -1    98 						win.addEventListener('load', () => observer(win, topic));
   -1    99 					};
  105   100 
  106    -1 						Services.ww.registerNotification(observer);
   -1   101 					Services.ww.registerNotification(observer);
  107   102 
  108    -1 						var e = Services.ww.getWindowEnumerator();
  109    -1 						while (e.hasMoreElements()) {
  110    -1 							observer(e.getNext(), 'domwindowopened');
  111    -1 						}
  112    -1 					},
  113    -1 				}).api(),
   -1   103 					var e = Services.ww.getWindowEnumerator();
   -1   104 					while (e.hasMoreElements()) {
   -1   105 						observer(e.getNext(), 'domwindowopened');
   -1   106 					}
   -1   107 				},
  114   108 			},
  115   109 		};
  116   110 	}

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

@@ -28,23 +28,9 @@
   28    28 			"type": "integer"
   29    29 		}]
   30    30 	}, {
   31    -1 		"name": "createTab",
   -1    31 		"name": "patchOpenSelectedMessages",
   32    32 		"type": "function",
   33    33 		"async": false,
   34    -1 		"parameters": [{
   35    -1 			"name": "url",
   36    -1 			"type": "string"
   37    -1 		}]
   38    -1 	}],
   39    -1 	"events": [{
   40    -1 		"name": "onOpenTab",
   41    -1 		"type": "function",
   42    -1 		"parameters": [{
   43    -1 			"name": "ids",
   44    -1 			"type": "array",
   45    -1 			"items": {
   46    -1 				"type": "string"
   47    -1 			}
   48    -1 		}]
   -1    34 		"parameters": []
   49    35 	}]
   50    36 }]