Refactor taSpamReport to remove locking mechanism and streamline data handling
This commit is contained in:
parent
a35fc05e7f
commit
1416e3a1f5
1 changed files with 42 additions and 55 deletions
|
|
@ -17,82 +17,69 @@
|
|||
*/
|
||||
|
||||
export const taSpamReport = {
|
||||
|
||||
logger: console,
|
||||
_internal_data_id: 'mzta-spam-report-data',
|
||||
_data_prefix: 'mzta-spam-report-',
|
||||
_max_reports: 100,
|
||||
lock: false,
|
||||
|
||||
async saveReportData(data, data_id){
|
||||
while (this.lock) {
|
||||
await new Promise((resolve) => setTimeout(resolve, 100)); // Wait for the lock to be released
|
||||
}
|
||||
|
||||
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 saveReportData(data, data_id) {
|
||||
const key = this._data_prefix + data_id;
|
||||
await browser.storage.session.set({ [key]: data });
|
||||
},
|
||||
|
||||
async loadReportData(data_id){
|
||||
let output = await browser.storage.session.get(taSpamReport._internal_data_id);
|
||||
return output[taSpamReport._internal_data_id][data_id];
|
||||
async loadReportData(data_id) {
|
||||
const key = this._data_prefix + data_id;
|
||||
let output = await browser.storage.session.get(key);
|
||||
return output[key] || null;
|
||||
},
|
||||
|
||||
async getAllReportData(){
|
||||
let data = await browser.storage.session.get(taSpamReport._internal_data_id);
|
||||
//console.log(">>>>>>>>>>> getAllReportData: " + JSON.stringify(data));
|
||||
return data[taSpamReport._internal_data_id];
|
||||
},
|
||||
async getAllReportData() {
|
||||
let allData = await browser.storage.session.get(null);
|
||||
let reportData = {};
|
||||
|
||||
saveAllData(data){
|
||||
browser.storage.session.set({[taSpamReport._internal_data_id]: data});
|
||||
},
|
||||
|
||||
clearReportData(){
|
||||
browser.storage.session.clear();
|
||||
},
|
||||
|
||||
async truncReportData(){
|
||||
let data = taSpamReport.sortReportsByDate(await taSpamReport.getAllReportData());
|
||||
if(data == undefined) return;
|
||||
//console.log(">>>>>>>>>> truncReportData: " + JSON.stringify(data));
|
||||
if(Object.keys(data).length > taSpamReport._max_reports){
|
||||
let keys = Object.keys(data);
|
||||
for(let i = taSpamReport._max_reports; i < keys.length; i++){
|
||||
// console.log(">>>>>>>>>> truncReportData: " + keys[i]);
|
||||
// console.log(">>>>>>>>>> truncReportData i: " + i);
|
||||
delete data[keys[i]];
|
||||
for (const [key, value] of Object.entries(allData)) {
|
||||
if (key.startsWith(this._data_prefix)) {
|
||||
reportData[key.replace(this._data_prefix, '')] = value;
|
||||
}
|
||||
}
|
||||
|
||||
return reportData;
|
||||
},
|
||||
|
||||
async clearReportData() {
|
||||
let allData = await browser.storage.session.get(null);
|
||||
let keysToDelete = Object.keys(allData).filter(key => key.startsWith(this._data_prefix));
|
||||
|
||||
for (let key of keysToDelete) {
|
||||
await browser.storage.session.remove(key);
|
||||
}
|
||||
},
|
||||
|
||||
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) {
|
||||
if(data == undefined) return undefined;
|
||||
if (!data) return {};
|
||||
const reportKeys = Object.keys(data);
|
||||
reportKeys.sort((a, b) => {
|
||||
const dateA = new Date(data[a].report_date);
|
||||
const dateB = new Date(data[b].report_date);
|
||||
return dateB - dateA;
|
||||
});
|
||||
const sortedReports = {};
|
||||
|
||||
let sortedReports = {};
|
||||
reportKeys.forEach((key) => {
|
||||
sortedReports[key] = data[key];
|
||||
});
|
||||
|
||||
return sortedReports;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue