Skip to content

Commit 0da15f0

Browse files
committed
Add support for messages displayed in a window
1 parent ab2b886 commit 0da15f0

File tree

3 files changed

+63
-42
lines changed

3 files changed

+63
-42
lines changed

background.js

+27-6
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,40 @@ browser.storage.local.get().then((res) => {
2525
}
2626
});
2727

28-
browser.messageDisplay.onMessageDisplayed.addListener((tab, message) => {
29-
browser.messages.getFull(message.id).then((messagepart) => {
28+
function displayReceivedHeader(tabId, messageId) {
29+
browser.messages.getFull(messageId).then((messagepart) => {
3030
const headers = messagepart.headers.received;
3131
if (headers) {
3232
browser.storage.local.get().then((res) => {
3333
const parsed = parseReceivedHeaders(headers, res.regexp);
34-
browser.displayReceivedHeader.setReceivedHeaderValue(tab.id, parsed);
35-
browser.displayReceivedHeader.setReceivedHeaderHidden(tab.id, !parsed.length);
34+
browser.displayReceivedHeader.setReceivedHeaderValue(tabId, parsed);
35+
browser.displayReceivedHeader.setReceivedHeaderHidden(tabId, !parsed.length);
3636
});
3737
} else {
38-
browser.displayReceivedHeader.setReceivedHeaderHidden(tab.id, true);
38+
browser.displayReceivedHeader.setReceivedHeaderHidden(tabId, true);
3939
}
4040
});
41+
}
42+
43+
browser.windows.getAll({populate: true, windowTypes: ["normal", "messageDisplay"]}).then((windows) => {
44+
windows.forEach(function (window) {
45+
browser.displayReceivedHeader.addHeadersToWindowById(window.id);
46+
window.tabs.filter((tab) => tab.active)
47+
.forEach(function (tab) {
48+
browser.messageDisplay.getDisplayedMessage(tab.id).then((message) => {
49+
if (!message) return;
50+
displayReceivedHeader(tab.id, message.id);
51+
});
52+
});
53+
});
4154
});
4255

43-
browser.displayReceivedHeader.init();
56+
browser.windows.onCreated.addListener((window) => {
57+
// Skip popup, devtools, etc.
58+
if (window.type !== "normal" && window.type !== "messageDisplay") return;
59+
browser.displayReceivedHeader.addHeadersToWindowById(window.id);
60+
});
61+
62+
browser.messageDisplay.onMessageDisplayed.addListener((tab, message) => {
63+
displayReceivedHeader(tab.id, message.id);
64+
});

experiments/displayReceivedHeader.js

+29-34
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
"use strict";
55

66
const {ExtensionCommon} = ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm");
7-
const {ExtensionSupport} = ChromeUtils.import("resource:///modules/ExtensionSupport.jsm");
87
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
98

109
// eslint-disable-next-line no-var
@@ -20,37 +19,32 @@ var displayReceivedHeader = class extends ExtensionCommon.ExtensionAPI {
2019
context.callOnClose(this);
2120
return {
2221
displayReceivedHeader: {
23-
init() {
24-
// Listen for the main Thunderbird windows opening.
25-
ExtensionSupport.registerWindowListener("displayReceivedHeaderListener", {
26-
chromeURLs: ["chrome://messenger/content/messenger.xhtml"],
27-
onLoadWindow(window) {
28-
const {document} = window;
29-
const expandedHeaders2 = document.getElementById("expandedHeaders2");
22+
addHeadersToWindowById(windowId) {
23+
const window = Services.wm.getOuterWindowWithId(windowId);
24+
const {document} = window;
25+
const expandedHeaders2 = document.getElementById("expandedHeaders2");
3026

31-
if (expandedHeaders2) {
32-
const element = document.createElement("tr");
33-
element.id = "expandedReceivedRow";
27+
if (expandedHeaders2) {
28+
const element = document.createElement("tr");
29+
element.id = "expandedReceivedRow";
3430

35-
const headerRowTitle = document.createElement("th");
36-
const headerRowTitleLabel = document.createXULElement("label");
37-
headerRowTitleLabel.id = "expandedReceivedLabel";
38-
headerRowTitleLabel.classList.add("headerName");
39-
headerRowTitleLabel.value = "Received";
40-
headerRowTitleLabel.control = "receivedReceivedHeader";
41-
headerRowTitle.appendChild(headerRowTitleLabel);
31+
const headerRowTitle = document.createElement("th");
32+
const headerRowTitleLabel = document.createXULElement("label");
33+
headerRowTitleLabel.id = "expandedReceivedLabel";
34+
headerRowTitleLabel.classList.add("headerName");
35+
headerRowTitleLabel.value = "Received";
36+
headerRowTitleLabel.control = "receivedReceivedHeader";
37+
headerRowTitle.appendChild(headerRowTitleLabel);
4238

43-
const headerRowValue = document.createElement("td");
44-
headerRowValue.id = "receivedReceivedHeader";
39+
const headerRowValue = document.createElement("td");
40+
headerRowValue.id = "receivedReceivedHeader";
4541

46-
element.appendChild(headerRowTitle);
47-
element.appendChild(headerRowValue);
48-
expandedHeaders2.appendChild(element);
49-
} else {
50-
throw Error("Could not find the expandedHeaders2 element");
51-
}
52-
},
53-
});
42+
element.appendChild(headerRowTitle);
43+
element.appendChild(headerRowValue);
44+
expandedHeaders2.appendChild(element);
45+
} else {
46+
throw Error("Could not find the expandedHeaders2 element");
47+
}
5448
},
5549
setReceivedHeaderHidden(tabId, hidden) {
5650
const document = getDocumentByTabId(tabId);
@@ -84,12 +78,13 @@ var displayReceivedHeader = class extends ExtensionCommon.ExtensionAPI {
8478

8579
// eslint-disable-next-line class-methods-use-this
8680
close() {
87-
for (const window of Services.wm.getEnumerator("mail:3pane")) {
88-
const expandedReceivedRow = window.document.getElementById("expandedReceivedRow");
89-
if (expandedReceivedRow) {
90-
expandedReceivedRow.remove();
81+
["mail:3pane", "mail:messageWindow"].forEach((windowType) => {
82+
for (const window of Services.wm.getEnumerator(windowType)) {
83+
const expandedReceivedRow = window.document.getElementById("expandedReceivedRow");
84+
if (expandedReceivedRow) {
85+
expandedReceivedRow.remove();
86+
}
9187
}
92-
}
93-
ExtensionSupport.unregisterWindowListener("displayReceivedHeaderListener");
88+
});
9489
}
9590
};

experiments/displayReceivedHeader.json

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@
33
"namespace": "displayReceivedHeader",
44
"functions": [
55
{
6-
"name": "init",
6+
"name": "addHeadersToWindowById",
77
"type": "function",
8-
"parameters": []
8+
"parameters": [
9+
{
10+
"name": "windowId",
11+
"type": "integer"
12+
}
13+
]
914
},
1015
{
1116
"name": "setReceivedHeaderHidden",

0 commit comments

Comments
 (0)