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:
+12
-6
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user