Refactor taSpamReport to remove locking mechanism and streamline data handling

This commit is contained in:
mic 2025-03-06 21:54:39 +01:00
parent a35fc05e7f
commit 1416e3a1f5

View file

@ -17,82 +17,69 @@
*/ */
export const taSpamReport = { export const taSpamReport = {
logger: console, logger: console,
_internal_data_id: 'mzta-spam-report-data', _data_prefix: 'mzta-spam-report-',
_max_reports: 100, _max_reports: 100,
lock: false,
async saveReportData(data, data_id) { async saveReportData(data, data_id) {
while (this.lock) { const key = this._data_prefix + data_id;
await new Promise((resolve) => setTimeout(resolve, 100)); // Wait for the lock to be released await browser.storage.session.set({ [key]: data });
}
this.lock = true;
let obj = await browser.storage.session.get(taSpamReport._internal_data_id);
// console.log(">>>>>>>> saveReportData obj 1: " + JSON.stringify(obj));
if(obj == undefined){
obj = {};
obj[taSpamReport._internal_data_id] = {};
// console.log(">>>>>>>> saveReportData obj 2a: " + JSON.stringify(obj));
}
if(Object.keys(obj).length === 0){
obj[taSpamReport._internal_data_id] = {};
// console.log(">>>>>>>> saveReportData obj 2b: " + JSON.stringify(obj));
}
obj[taSpamReport._internal_data_id][data_id] = data;
// console.log(">>>>>>>> saveReportData obj 3: " + JSON.stringify(obj));
await browser.storage.session.set(obj);
this.lock = false;
}, },
async loadReportData(data_id) { async loadReportData(data_id) {
let output = await browser.storage.session.get(taSpamReport._internal_data_id); const key = this._data_prefix + data_id;
return output[taSpamReport._internal_data_id][data_id]; let output = await browser.storage.session.get(key);
return output[key] || null;
}, },
async getAllReportData() { async getAllReportData() {
let data = await browser.storage.session.get(taSpamReport._internal_data_id); let allData = await browser.storage.session.get(null);
//console.log(">>>>>>>>>>> getAllReportData: " + JSON.stringify(data)); let reportData = {};
return data[taSpamReport._internal_data_id];
for (const [key, value] of Object.entries(allData)) {
if (key.startsWith(this._data_prefix)) {
reportData[key.replace(this._data_prefix, '')] = value;
}
}
return reportData;
}, },
saveAllData(data){ async clearReportData() {
browser.storage.session.set({[taSpamReport._internal_data_id]: data}); let allData = await browser.storage.session.get(null);
}, let keysToDelete = Object.keys(allData).filter(key => key.startsWith(this._data_prefix));
clearReportData(){ for (let key of keysToDelete) {
browser.storage.session.clear(); await browser.storage.session.remove(key);
}
}, },
async truncReportData() { async truncReportData() {
let data = taSpamReport.sortReportsByDate(await taSpamReport.getAllReportData()); let data = await this.getAllReportData();
if(data == undefined) return; let sortedData = this.sortReportsByDate(data);
//console.log(">>>>>>>>>> truncReportData: " + JSON.stringify(data)); let keys = Object.keys(sortedData);
if(Object.keys(data).length > taSpamReport._max_reports){
let keys = Object.keys(data); if (keys.length > this._max_reports) {
for(let i = taSpamReport._max_reports; i < keys.length; i++){ for (let i = this._max_reports; i < keys.length; i++) {
// console.log(">>>>>>>>>> truncReportData: " + keys[i]); await browser.storage.session.remove(this._data_prefix + keys[i]);
// console.log(">>>>>>>>>> truncReportData i: " + i);
delete data[keys[i]];
} }
} }
taSpamReport.saveAllData(data);
}, },
sortReportsByDate(data) { sortReportsByDate(data) {
if(data == undefined) return undefined; if (!data) return {};
const reportKeys = Object.keys(data); const reportKeys = Object.keys(data);
reportKeys.sort((a, b) => { reportKeys.sort((a, b) => {
const dateA = new Date(data[a].report_date); const dateA = new Date(data[a].report_date);
const dateB = new Date(data[b].report_date); const dateB = new Date(data[b].report_date);
return dateB - dateA; return dateB - dateA;
}); });
const sortedReports = {};
let sortedReports = {};
reportKeys.forEach((key) => { reportKeys.forEach((key) => {
sortedReports[key] = data[key]; sortedReports[key] = data[key];
}); });
return sortedReports; return sortedReports;
} }
} };