Compare commits

..

5 Commits

Author SHA1 Message Date
dec025b45a feat: raise OptionError on missing OAuth provider class instead of generic AttributeError 2026-02-19 10:19:03 +02:00
89008e5350 fix: use context manager for selector and smtp session 2026-02-19 10:19:03 +02:00
422196d413 fix: force data filter for tar archive extraction
(python3.14 default anyway)
2026-02-19 10:19:03 +02:00
6fe2eade26 feat: (more) secure cookies 2026-02-19 10:19:03 +02:00
5266f54257 fix: speedup table reload by updating only changed statuses
it has been found that on big (>100) repos it starts lagging on reload.
This commit adds guard to avoid updating rows whose package statuses
were not changed
2026-02-19 10:19:03 +02:00
2 changed files with 4 additions and 4 deletions

View File

@@ -87,7 +87,7 @@
}; };
}); });
updateTable(table, payload); updateTable(table, payload, row => row.timestamp);
table.bootstrapTable("hideLoading"); table.bootstrapTable("hideLoading");
}, },
onFailure, onFailure,

View File

@@ -195,16 +195,16 @@
return intervalId; return intervalId;
} }
function updateTable(table, rows) { function updateTable(table, rows, rowChangedKey) {
// instead of using load method here, we just update rows manually to avoid table reinitialization // instead of using load method here, we just update rows manually to avoid table reinitialization
const currentData = table.bootstrapTable("getData").reduce((accumulator, row) => { const currentData = table.bootstrapTable("getData").reduce((accumulator, row) => {
accumulator[row.id] = {state: row["0"], status: row.status}; accumulator[row.id] = {state: row["0"], key: rowChangedKey(row)};
return accumulator; return accumulator;
}, {}); }, {});
// insert or update rows, skipping ones whose status hasn't changed // insert or update rows, skipping ones whose status hasn't changed
rows.forEach(row => { rows.forEach(row => {
if (Object.hasOwn(currentData, row.id)) { if (Object.hasOwn(currentData, row.id)) {
if (row.status === currentData[row.id].status) { if (rowChangedKey(row) === currentData[row.id].key) {
return; return;
} }
row["0"] = currentData[row.id].state; // copy checkbox state row["0"] = currentData[row.id].state; // copy checkbox state