- commit
- 2db414a26285fed761f8353644fb3b672ea9f2f1
- parent
- 4619909cc391c8509f65d40bbc40ffc732a1809e
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2021-08-12 11:45
use Message-ID header instead of URI pro: not dependent on folder con: breaks open conversations
Diffstat
| M | background.js | 4 | ++-- |
| M | experiment-api/api.js | 22 | ++++++++++------------ |
| M | experiment-api/schema.json | 4 | ++-- |
| M | src/js/main.js | 6 | +++--- |
4 files changed, 17 insertions, 19 deletions
diff --git a/background.js b/background.js
@@ -1,5 +1,5 @@ 1 1 /* global browser */ 2 23 -1 browser.xi.onOpenTab.addListener(uris => {4 -1 browser.xi.createTab('/content/main.html?uris=' + encodeURIComponent(uris));-1 3 browser.xi.onOpenTab.addListener(ids => { -1 4 browser.xi.createTab('/content/main.html?ids=' + encodeURIComponent(ids)); 5 5 });
diff --git a/experiment-api/api.js b/experiment-api/api.js
@@ -1,18 +1,12 @@ 1 1 /* global Components, ChromeUtils */ 2 2 3 3 var aomStartup = Components.classes['@mozilla.org/addons/addon-manager-startup;1'].getService(Components.interfaces.amIAddonManagerStartup);4 -1 var Messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);5 4 6 5 var {ExtensionCommon} = ChromeUtils.import('resource://gre/modules/ExtensionCommon.jsm'); 7 6 var {Gloda} = ChromeUtils.import('resource:///modules/gloda/GlodaPublic.jsm'); 8 7 var {Services} = ChromeUtils.import('resource://gre/modules/Services.jsm'); 9 8 var {MsgHdrToMimeMessage} = ChromeUtils.import('resource:///modules/gloda/MimeMessage.jsm'); 10 911 -1 var uri2msg = function(uri) {12 -1 var messageService = Messenger.messageServiceFromURI(uri);13 -1 return messageService.messageURIToMsgHdr(uri);14 -1 };15 -116 10 var msg2uri = function(msg) { 17 11 return msg.folder.getUriForMsg(msg); 18 12 }; @@ -37,7 +31,7 @@ var unique = function(l, keyFn) { 37 31 }); 38 32 }; 39 3340 -1 var getConversation = function(msgs) {-1 34 var getConversation = function(ids) { 41 35 return new Promise(resolve => { 42 36 var conversationListener = { 43 37 onItemsAdded: function() {}, @@ -72,7 +66,9 @@ var getConversation = function(msgs) { 72 66 }, 73 67 }; 74 6875 -1 Gloda.getMessageCollectionForHeaders(msgs, listener, null);-1 69 var query = Gloda.newQuery(Gloda.NOUN_MESSAGE); -1 70 query.headerMessageID.apply(query, ids); -1 71 query.getCollection(listener, null); 76 72 }); 77 73 }; 78 74 @@ -84,15 +80,17 @@ var xi = class extends ExtensionCommon.ExtensionAPI { 84 80 body: glodaMsg._indexedBodyText, 85 81 canReplyToList: !!glodaMsg.mailingLists, 86 82 attachmentInfos: glodaMsg.attachmentInfos.map(a => ({name: a.name, url: a.url})),87 -1 uri: msg2uri(glodaMsg.folderMessage),-1 83 -1 84 // backport from thunderbird 85 -1 85 headerMessageId: glodaMsg.headerMessageID, 88 86 }); 89 87 }; 90 88 91 89 return { 92 90 xi: {93 -1 getConversation(uris) {-1 91 getConversation(ids) { 94 92 // https://bugzilla.mozilla.org/show_bug.cgi?id=166567695 -1 return getConversation(uris.map(uri2msg)).then(results => results.map(glodaMsg2msg));-1 93 return getConversation(ids).then(results => results.map(glodaMsg2msg)); 96 94 }, 97 95 getFull(id) { 98 96 // the original getFull() is restricted to these fields: @@ -141,7 +139,7 @@ var xi = class extends ExtensionCommon.ExtensionAPI { 141 139 if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') { 142 140 win.MsgOpenSelectedMessages = () => { 143 141 var msgs = win.gFolderDisplay.selectedMessages;144 -1 fire.async(msgs.map(msg2uri));-1 142 fire.async(msgs.map(msgHdr => msgHdr.messageId)); 145 143 }; 146 144 } 147 145 win.addEventListener('load', () => observer(win, topic));
diff --git a/experiment-api/schema.json b/experiment-api/schema.json
@@ -5,7 +5,7 @@ 5 5 "type": "function", 6 6 "async": true, 7 7 "parameters": [{8 -1 "name": "uris",-1 8 "name": "ids", 9 9 "type": "array", 10 10 "items": { 11 11 "type": "string" @@ -61,7 +61,7 @@ 61 61 "name": "onOpenTab", 62 62 "type": "function", 63 63 "parameters": [{64 -1 "name": "uris",-1 64 "name": "ids", 65 65 "type": "array", 66 66 "items": { 67 67 "type": "string"
diff --git a/src/js/main.js b/src/js/main.js
@@ -3,12 +3,12 @@ 3 3 var createMessageElement = require('./message'); 4 4 var util = require('./util.js'); 5 56 -1 var initialUris = (util.getParams().uris || '').split(',');-1 6 var initialIDs = (util.getParams().ids || '').split(','); 7 7 8 8 var container = document.querySelector('.conversation__main'); 9 9 var anyExpanded = false; 10 1011 -1 browser.xi.getConversation(initialUris).then(function(conversation) {-1 11 browser.xi.getConversation(initialIDs).then(function(conversation) { 12 12 var subject = conversation[0].subject || '(no subject)'; 13 13 document.querySelector('.conversation__subject').textContent = subject; 14 14 document.title = subject; @@ -18,7 +18,7 @@ browser.xi.getConversation(initialUris).then(function(conversation) { 18 18 const expanded = ( 19 19 conversation.length === 1 20 20 || !msg.read21 -1 || (initialUris.length === 1 && initialUris.includes(msg.uri))-1 21 || (initialIDs.length === 1 && initialIDs.includes(msg.headerMessageId)) 22 22 || (!anyExpanded && i === conversation.length - 1) 23 23 ); 24 24