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); .filter(e => e.item !== null);
if (validTrash.length > 0) { if (validTrash.length > 0) {
// Nach deletedAt aufsteigend sortieren, DANN die neuesten TRASH_MAX_ENTRIES behalten. // Lokale Eintraege sind die EINZIGE Kopie ihrer geloeschten Daten -> Vorrang. Importierte
// Positionsbasiertes slice(-N) wuerde sonst frische lokale Eintraege verdraengen // stammen aus einem Backup, das der Nutzer noch besitzt -> nachrangig. Daher: erst ALLE
// statt der aeltesten — Datenverlust, da ein Trash-Eintrag die einzige Kopie ist. // lokalen behalten (pushToTrash kappt sie bereits auf TRASH_MAX_ENTRIES), dann mit den
const combined = [...trash, ...validTrash]; // NEUESTEN importierten bis zur Obergrenze auffuellen. Ein frischer Import verdraengt so
combined.sort((a, b) => a.deletedAt - b.deletedAt); // keine aelteren lokalen Sole-Copies mehr (frueheres sort+slice(-N) konnte das, data-loss).
trash = combined.slice(-TRASH_MAX_ENTRIES); 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(); await saveTrash();
} }
} }