-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground.js
142 lines (119 loc) · 4.4 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// ---------------------------------------------------------------------
var ls_running = false;
var ls_total_emails = 0;
var ls_emails_sent = 0;
var ls_destinatarios = [];
// ---------------------------------------------------------------------
async function read_local_storage() {
let ls = await messenger.storage.local.get({
running: false,
total_emails: 0,
emails_sent: 0,
destinatarios: [],
});
ls_running = ls.running;
ls_total_emails = ls.total_emails;
ls_destinatarios = ls.destinatarios;
ls_emails_sent = ls.emails_sent;
}
async function update_local_storage() {
/* Função responsável por salvar o valor atual das variáveis globais no localStorage. */
await messenger.storage.local.set({
running: ls_running,
total_emails: ls_total_emails,
emails_sent: ls_emails_sent,
destinatarios: ls_destinatarios,
});
}
// ---------------------------------------------------------------------
async function send_message_frontend(value) {
/* Função responsável por enviar uma mensagem para o FrontEnd */
try {
await messenger.runtime.sendMessage({ status: value });
} catch (error) {
// console.log(`Erro ao enviar mensagem ao frontend: |${error}|.`);
}
}
async function getSelectedEmails() {
/* Função responsável por recuperar as mensagens selecionadas pelo usuário. */
let tabs = await messenger.tabs.query({
active: true,
currentWindow: true,
});
let selected_messages = await messenger.mailTabs.getSelectedMessages(
tabs[0].id
);
selected_messages = selected_messages.messages;
return selected_messages;
}
async function forwardEmail(message, email_index) {
/* Função responsável por efetivamente encaminhar um e-mail. */
try {
// Recupera informações do remetente:
let account = await messenger.accounts.get(message.folder.accountId);
let identity = account.identities[0];
// Abre uma janela de encaminhamento de e-mails:
let tab_forward = await messenger.compose.beginForward(
message.id,
"forwardInline",
{
to: ls_destinatarios,
from: identity.email,
identityId: identity.id,
}
);
// Minimiza a janela:
let window = await messenger.windows.get(tab_forward.windowId); // Recupera a janela
window = await messenger.windows.update(window.id, {
state: "minimized",
}); // Minimiza a janela
// Envia o e-mail:
await messenger.compose.sendMessage(tab_forward.id, {
mode: "sendNow",
}); // Efetivamente envia o e-mail
// Atualiza variáveis globais e localStorage:
ls_emails_sent += 1;
await update_local_storage();
console.log(
`E-mail ${email_index} enviado com sucesso (${ls_emails_sent}/${ls_total_emails});`
);
// Informa ao frontend:
await send_message_frontend("sent");
} catch (error) {
console.log(`Erro ao encaminhar o e-mail ${email_index}: |${error}|;`);
throw error;
}
}
async function forwardSelectedEmails() {
/* Função responsável por coordenar o encaminhamento dos e-mails selecionados. */
// Recupera os e-mails selecionados:
let selected_messages = await getSelectedEmails();
// Atualiza variáveis globais e localStorage:
ls_running = true;
ls_emails_sent = 0;
ls_total_emails = selected_messages.length;
await update_local_storage();
// Cria as promises de encaminhamento de e-mail:
let promises = selected_messages.map((message, i) =>
forwardEmail(message, i)
);
// Executa todas as promises:
try {
let rv = await Promise.all(promises);
console.log("Todos e-mails enviados com sucesso;");
} catch (error) {
console.log(`Erro ao enviar e-mail: |${error}|.`);
}
// Atualiza variáveis globais e localStorage:
ls_running = false;
await update_local_storage();
await send_message_frontend("done");
}
// ---------------------------------------------------------------------
messenger.runtime.onMessage.addListener(async (message) => {
if (message.action === "start") {
await read_local_storage();
await forwardSelectedEmails();
}
});
// ---------------------------------------------------------------------