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];
},
saveAllData(data){ for (const [key, value] of Object.entries(allData)) {
browser.storage.session.set({[taSpamReport._internal_data_id]: data}); if (key.startsWith(this._data_prefix)) {
}, reportData[key.replace(this._data_prefix, '')] = value;
}
clearReportData(){ }
browser.storage.session.clear();
}, return reportData;
},
async truncReportData(){
let data = taSpamReport.sortReportsByDate(await taSpamReport.getAllReportData()); async clearReportData() {
if(data == undefined) return; let allData = await browser.storage.session.get(null);
//console.log(">>>>>>>>>> truncReportData: " + JSON.stringify(data)); let keysToDelete = Object.keys(allData).filter(key => key.startsWith(this._data_prefix));
if(Object.keys(data).length > taSpamReport._max_reports){
let keys = Object.keys(data); for (let key of keysToDelete) {
for(let i = taSpamReport._max_reports; i < keys.length; i++){ await browser.storage.session.remove(key);
// console.log(">>>>>>>>>> truncReportData: " + keys[i]); }
// console.log(">>>>>>>>>> truncReportData i: " + i); },
delete data[keys[i]];
async truncReportData() {
let data = await this.getAllReportData();
let sortedData = this.sortReportsByDate(data);
let keys = Object.keys(sortedData);
if (keys.length > this._max_reports) {
for (let i = this._max_reports; i < keys.length; i++) {
await browser.storage.session.remove(this._data_prefix + 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;
} }
} };