taSpamReport is now a class and not a singleton

This commit is contained in:
mic 2026-03-22 22:38:23 +01:00
parent 55240868dd
commit 1ea548a61d
3 changed files with 49 additions and 49 deletions

View file

@ -17,35 +17,35 @@
*/
import { taStorage } from './mzta-storage.js';
import { taLogger } from './mzta-logger.js';
export const taSpamReport = {
logger: console,
do_debug: false,
_data_prefix: 'mzta-spam-report-',
_processing_prefix: 'mzta-spam-processing-',
_max_reports: 100,
_storage: null,
export class taSpamReport {
_getStorage() {
if (!this._storage) this._storage = new taStorage(this.do_debug);
return this._storage;
},
_processing_prefix = 'mzta-spam-processing-';
_max_reports = 100;
_storage = null;
taLog = null;
constructor(do_debug = false) {
this._storage = new taStorage(do_debug);
this.taLog = new taLogger('mzta-spamreport', do_debug);
}
async setProcessing(data_id) {
const key = this._processing_prefix + data_id;
await browser.storage.session.set({ [key]: true });
},
}
async isProcessing(data_id) {
const key = this._processing_prefix + data_id;
let output = await browser.storage.session.get(key);
return output[key] || false;
},
}
async saveReportData(data, data_id) {
await this._getStorage().writeSpam(data_id, data, true);
await this._storage.writeSpam(data_id, data, true);
await browser.storage.session.remove(this._processing_prefix + data_id);
},
}
async saveError(data_id, error_message) {
let data = {
@ -56,11 +56,11 @@ export const taSpamReport = {
};
await this.saveReportData(data, data_id);
return data;
},
}
async loadReportData(data_id) {
let record = await this._getStorage().getRecord(data_id);
if (!record || !this._getStorage().hasField(record, 'spam')) return null;
let record = await this._storage.getRecord(data_id);
if (!record || !this._storage.hasField(record, 'spam')) return null;
let spam = record.spam;
return {
headerMessageId: data_id,
@ -73,42 +73,40 @@ export const taSpamReport = {
moved: spam.moved,
SpamThreshold: spam.SpamThreshold,
};
},
}
async removeReportData(data_id) {
await this._getStorage().deleteSpamField(data_id);
await this._storage.deleteSpamField(data_id);
await browser.storage.session.remove(this._processing_prefix + data_id);
},
}
async getAllReportData() {
return await this._getStorage().getAllSpamRecords();
},
return await this._storage.getAllSpamRecords();
}
async clearReportData() {
let storage = this._getStorage();
let allSpam = await storage.getAllSpamRecords();
let allSpam = await this._storage.getAllSpamRecords();
for (let messageId of Object.keys(allSpam)) {
await storage.deleteSpamField(messageId);
await this._storage.deleteSpamField(messageId);
}
let allSession = await browser.storage.session.get(null);
let keysToDelete = Object.keys(allSession).filter(k => k.startsWith(this._processing_prefix));
for (let key of keysToDelete) {
await browser.storage.session.remove(key);
}
},
}
async truncReportData() {
let data = await this._getStorage().getAllSpamRecords();
let data = await this._storage.getAllSpamRecords();
let sortedData = this.sortReportsByDate(data);
let keys = Object.keys(sortedData);
if (keys.length > this._max_reports) {
let storage = this._getStorage();
for (let i = this._max_reports; i < keys.length; i++) {
await storage.deleteSpamField(keys[i]);
await this._storage.deleteSpamField(keys[i]);
}
}
},
}
sortReportsByDate(data) {
if (!data) return {};
@ -126,4 +124,4 @@ export const taSpamReport = {
return sortedReports;
}
};
}

View file

@ -94,6 +94,7 @@ await reload_pref_init();
let taLog = new taLogger("mzta-background",prefs_init.do_debug);
taWorkingStatus.taLog = taLog;
let spamReport = new taSpamReport(prefs_init.do_debug);
let special_prompts_ids = getActiveSpecialPromptsIDs({
addtags: prefs_init.add_tags,
@ -359,10 +360,10 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (sender.tab.type !== 'messageDisplay' && sender.tab.type !== 'mail') return;
let message = await browser.messageDisplay.getDisplayedMessage(tabId);
if (!message) return;
let report = await taSpamReport.loadReportData(message.headerMessageId);
let report = await spamReport.loadReportData(message.headerMessageId);
if (report) {
browser.tabs.sendMessage(tabId, { command: "showSpamReport", data: report });
} else if (await taSpamReport.isProcessing(message.headerMessageId)) {
} else if (await spamReport.isProcessing(message.headerMessageId)) {
browser.tabs.sendMessage(tabId, { command: "showSpamCheckInProgress" });
}
} catch (e) {
@ -372,7 +373,7 @@ messenger.runtime.onMessage.addListener((message, sender, sendResponse) => {
_checkSpamReport(sender.tab.id);
break;
case 'removeSpamReport':
taSpamReport.removeReportData(message.headerMessageId);
spamReport.removeReportData(message.headerMessageId);
break;
default:
break;
@ -1042,9 +1043,6 @@ const newEmailListener = (folder, messagesList) => {
async function _newEmailListener(){
let messages = getMessages(messagesList);
taSpamReport.logger = taLog;
taSpamReport.do_debug = prefs_init.do_debug;
let add_tags_auto_enabled = prefs_init.add_tags && prefs_init.add_tags_auto;
await processEmails({
@ -1054,7 +1052,7 @@ const newEmailListener = (folder, messagesList) => {
});
if(prefs_init.spamfilter){
taSpamReport.truncReportData();
spamReport.truncReportData();
}
}
@ -1177,8 +1175,8 @@ async function processEmails(args) {
}
}
await taSpamReport.removeReportData(message.headerMessageId);
await taSpamReport.setProcessing(message.headerMessageId);
await spamReport.removeReportData(message.headerMessageId);
await spamReport.setProcessing(message.headerMessageId);
await updateSpamPanel(message.headerMessageId, "showSpamCheckInProgress");
@ -1209,7 +1207,7 @@ async function processEmails(args) {
spamfilter_result = (await cmd_spamfilter.sendPrompt()).trim();
} catch (err) {
console.error("[ThunderAI | SpamFilter] Error getting spamfilter: ", err);
let err_data = await taSpamReport.saveError(message.headerMessageId, err.message || String(err));
let err_data = await spamReport.saveError(message.headerMessageId, err.message || String(err));
await updateSpamPanel(message.headerMessageId, "showSpamReport", err_data);
continue;
}
@ -1220,7 +1218,7 @@ async function processEmails(args) {
jsonObj = extractJsonObject(spamfilter_result);
} catch (e) {
console.error("[ThunderAI | SpamFilter] Error extracting JSON from AI response: ", e);
let err_data = await taSpamReport.saveError(message.headerMessageId, e.message || String(e));
let err_data = await spamReport.saveError(message.headerMessageId, e.message || String(e));
await updateSpamPanel(message.headerMessageId, "showSpamReport", err_data);
continue;
}
@ -1246,7 +1244,7 @@ async function processEmails(args) {
taLog.log("Marked as spam [" + message.headerMessageId + "]");
}
taSpamReport.saveReportData(report_data, message.headerMessageId);
spamReport.saveReportData(report_data, message.headerMessageId);
// Check if the message is currently displayed and update the banner
await updateSpamPanel(message.headerMessageId, "showSpamReport", report_data);

View file

@ -41,11 +41,15 @@ import {
} from "../_lib/connection-ui.js";
let autocompleteSuggestions = [];
let taLog = new taLogger("mzta-spamfilter-page",true);
taSpamReport.logger = taLog;
let taLog = null;
let spamReport = null;
document.addEventListener('DOMContentLoaded', async () => {
let prefs = await browser.storage.sync.get({ do_debug: prefs_default.do_debug });
taLog = new taLogger("mzta-spamfilter-page", prefs.do_debug);
spamReport = new taSpamReport(prefs.do_debug);
let specialPrompts = await getSpecialPrompts();
let spamfilter_prompt = specialPrompts.find(prompt => prompt.id === 'prompt_spamfilter');
@ -162,10 +166,10 @@ document.addEventListener('DOMContentLoaded', async () => {
}
if (selectedAccounts.length === document.querySelectorAll('.accountCheckbox').length) {
browser.storage.sync.set({ spamfilter_enabled_accounts: [] });
taSpamReport.logger.log("All accounts selected, saving spamfilter_enabled_accounts = [].");
taLog.log("All accounts selected, saving spamfilter_enabled_accounts = [].");
} else {
browser.storage.sync.set({ spamfilter_enabled_accounts: selectedAccounts });
taSpamReport.logger.log("Saving spamfilter_enabled_accounts = " + JSON.stringify(selectedAccounts) + ".");
taLog.log("Saving spamfilter_enabled_accounts = " + JSON.stringify(selectedAccounts) + ".");
}
});
});
@ -200,7 +204,7 @@ function check_spamfilter_threshold(event) {
}
async function loadSpamReport(){
let report_data = await taSpamReport.getAllReportData();
let report_data = await spamReport.getAllReportData();
//console.log(">>>>>>>>>>>> loadSpamReport: " + JSON.stringify(report_data));
//document.getElementById("report_data").textContent = JSON.stringify(report_data, null, 2);
if(report_data == undefined){