-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground.js
110 lines (98 loc) · 2.78 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const openMID = "openMID";
const openMIDFromDatabase = "openMIDDatabase";
const openMIDFromServer = "openMIDServer";
const openMIDInBrowser = "openMIDBrowser";
const links = ["link", "header_pane_link"];
const browserUrls = {
Google: "https://groups.google.com/search?q=messageid%3A%mid",
"Howard Knight": "http://al.howardknight.net/?STYPE=msgid&MSGI=<%mid>",
};
messenger.menus.create({
contexts: links,
title: "Open Message-ID",
id: openMID,
visible: false,
});
messenger.menus.create({
contexts: links,
title: "… from Database",
id: openMIDFromDatabase,
parentId: openMID,
});
messenger.menus.create({
contexts: links,
title: "… from News Server",
id: openMIDFromServer,
parentId: openMID,
});
messenger.menus.create({
contexts: links,
title: "… in Browser",
id: openMIDInBrowser,
parentId: openMID,
});
messenger.menus.onShown.addListener((info, tab) => {
if (!info.linkUrl) {
return;
}
const isVisible = /^(mid|mailto|s?news|nntp):.*@.*/.test(info.linkUrl);
messenger.menus.update(openMID, {
visible: isVisible,
});
messenger.menus.refresh();
});
messenger.menus.onClicked.addListener(async (info, tab) => {
const extractMID = (url) => {
return decodeURI(url.replace(/(.*(\/|:))(?!.*(\/|:))/, ""));
};
const extractServer = (url) => {
const found = url.match(/^.*:\/\/(.*)\//);
return found?.length > 1 ? decodeURI(found[1]) : "";
};
if (info.menuItemId == openMIDFromDatabase) {
const mid = extractMID(info.linkUrl);
const displayedMessage = await messenger.messageDisplay.getDisplayedMessage(
await messenger.tabs.getCurrent()
);
const messageList = await messenger.messages.query({
accountId: displayedMessage.folder.accountId,
headerMessageId: mid,
});
await messenger.messageDisplay
.open(
messageList.messages.length
? { messageId: messageList.messages[0].id }
: { headerMessageId: mid }
)
.catch((e) => {
console.warn(e.message);
});
return;
}
if (info.menuItemId == openMIDFromServer) {
const mid = extractMID(info.linkUrl);
const messageList = await messenger.messages.query({
online: true,
headerMessageId: mid,
});
if (!messageList.messages.length) {
return;
}
await messenger.messageDisplay
.open({ messageId: messageList.messages[0].id })
.catch((e) => {
console.warn(e.message);
});
return;
}
if (info.menuItemId == openMIDInBrowser) {
const { selectedLookupService } = await messenger.storage.local.get({
selectedLookupService: "Google",
});
const mid = encodeURIComponent(extractMID(info.linkUrl));
browser.windows.openDefaultBrowser(
browserUrls[selectedLookupService].replace(/%mid/, mid)
);
return;
}
});