From ae4459610607e1e271c695429b5c293348a1d10e Mon Sep 17 00:00:00 2001 From: mic Date: Mon, 16 Feb 2026 21:54:17 +0100 Subject: [PATCH] showing the processing status for the antispam filter. see #658 --- _locales/en/messages.json | 4 ++++ js/mzta-compose-script.js | 31 +++++++++++++++++++++++++++++++ mzta-background.js | 16 ++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 97410de8..bdaec663 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1888,5 +1888,9 @@ "copy_text": { "message": "copy", "description": "" + }, + "spam_check_in_progress": { + "message": "Spam check in progress...", + "description": "" } } diff --git a/js/mzta-compose-script.js b/js/mzta-compose-script.js index 09e64272..d85a4914 100644 --- a/js/mzta-compose-script.js +++ b/js/mzta-compose-script.js @@ -617,7 +617,38 @@ switch (message.command) { break; + case "showSpamCheckInProgress": + if(document.getElementById('mzta-spam-report-banner')) return Promise.resolve(true); + if(document.getElementById('mzta-spam-check-progress')) return Promise.resolve(true); + + const containerProgress = document.createElement('div'); + containerProgress.id = 'mzta-spam-check-progress'; + + const isDarkProgress = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; + + let bgColorProgress = isDarkProgress ? '#003366' : '#e6f2ff'; + let textColorProgress = isDarkProgress ? '#cce5ff' : '#004085'; + let borderColorProgress = isDarkProgress ? '#004085' : '#b8daff'; + + containerProgress.style.cssText = `background-color: ${bgColorProgress}; color: ${textColorProgress}; border-bottom: 1px solid ${borderColorProgress}; padding: 8px 12px; font-family: system-ui, -apple-system, sans-serif; font-size: 13px; display: flex; align-items: center; gap: 15px; width: 100%; box-sizing: border-box;`; + + const textProgress = document.createElement('strong'); + textProgress.textContent = browser.i18n.getMessage("spam_check_in_progress"); + + const loadingImg = document.createElement('img'); + loadingImg.src = browser.runtime.getURL("/images/loading.gif"); + loadingImg.style.cssText = "height: 16px; width: 16px;"; + + containerProgress.appendChild(loadingImg); + containerProgress.appendChild(textProgress); + + document.body.insertBefore(containerProgress, document.body.firstChild); + return Promise.resolve(true); + case "showSpamReport": + const progressBanner = document.getElementById('mzta-spam-check-progress'); + if(progressBanner) progressBanner.remove(); + const data = message.data; if(document.getElementById('mzta-spam-report-banner')) return Promise.resolve(true); diff --git a/mzta-background.js b/mzta-background.js index 14ddacdc..4e2e7699 100644 --- a/mzta-background.js +++ b/mzta-background.js @@ -371,6 +371,8 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => { let report = await taSpamReport.loadReportData(message.headerMessageId); if (report) { browser.tabs.sendMessage(tabId, { command: "showSpamReport", data: report }); + } else if (await taSpamReport.isProcessing(message.headerMessageId)) { + browser.tabs.sendMessage(tabId, { command: "showSpamCheckInProgress" }); } } catch (e) { taLog.error("Error in checkSpamReport: " + e); @@ -1180,6 +1182,20 @@ async function processEmails(args) { continue; } } + + await taSpamReport.setProcessing(message.headerMessageId); + + if (prefs_init.spamfilter_show_msg_panel) { + let tabs = await browser.tabs.query({ active: true, currentWindow: true }); + if (tabs.length > 0) { + let activeTab = tabs[0]; + let displayedMessage = await browser.messageDisplay.getDisplayedMessage(activeTab.id); + if (displayedMessage && displayedMessage.id === message.id) { + browser.tabs.sendMessage(activeTab.id, { command: "showSpamCheckInProgress" }); + } + } + } + let curr_prompt_spamfilter = await getSpamFilterPrompt(); // console.log(">>>>>>>>>>>>> curr_prompt_spamfilter: " + JSON.stringify(curr_prompt_spamfilter)); let chatgpt_lang = await taPromptUtils.getDefaultLang(curr_prompt_spamfilter);