fix(trash): Import-Cap verdraengt keine lokalen Sole-Copies mehr

Beim Trash-Import sortierte combined.sort+slice(-N) rein nach deletedAt: brachte ein
Backup neuere Eintraege mit, fielen aeltere LOKALE Eintraege aus dem Cap — und die sind
die einzige Kopie der geloeschten Daten (Datenverlust). Jetzt haben lokale Eintraege
Vorrang (alle behalten, sind bereits auf TRASH_MAX_ENTRIES gekappt), Importe fuellen nur
den Rest mit den neuesten auf.
This commit is contained in:
2026-06-14 19:52:16 +02:00
parent 17eac64683
commit 530196ddf7
+12 -6
View File
@@ -124,12 +124,18 @@ function initDataButtons() {
}))
.filter(e => e.item !== null);
if (validTrash.length > 0) {
// Nach deletedAt aufsteigend sortieren, DANN die neuesten TRASH_MAX_ENTRIES behalten.
// Positionsbasiertes slice(-N) wuerde sonst frische lokale Eintraege verdraengen
// statt der aeltesten — Datenverlust, da ein Trash-Eintrag die einzige Kopie ist.
const combined = [...trash, ...validTrash];
combined.sort((a, b) => a.deletedAt - b.deletedAt);
trash = combined.slice(-TRASH_MAX_ENTRIES);
// Lokale Eintraege sind die EINZIGE Kopie ihrer geloeschten Daten -> Vorrang. Importierte
// stammen aus einem Backup, das der Nutzer noch besitzt -> nachrangig. Daher: erst ALLE
// lokalen behalten (pushToTrash kappt sie bereits auf TRASH_MAX_ENTRIES), dann mit den
// NEUESTEN importierten bis zur Obergrenze auffuellen. Ein frischer Import verdraengt so
// keine aelteren lokalen Sole-Copies mehr (frueheres sort+slice(-N) konnte das, data-loss).
const room = Math.max(0, TRASH_MAX_ENTRIES - trash.length);
const keptImports = validTrash
.slice()
.sort((a, b) => b.deletedAt - a.deletedAt) // neueste Importe zuerst
.slice(0, room);
// Am Ende nach deletedAt aufsteigend fuer eine stabile Anzeige-Reihenfolge.
trash = [...trash, ...keptImports].sort((a, b) => a.deletedAt - b.deletedAt);
await saveTrash();
}
}