v2.3 Papierkorb: Export/Import um trash erweitern (defensiv validiert)

This commit is contained in:
2026-06-14 10:02:31 +02:00
parent 22203d25a7
commit ba5f5c4978
+31
View File
@@ -32,6 +32,7 @@ function initDataButtons() {
exported: new Date().toISOString(),
boards,
settings,
trash,
notes: widgetData && Array.isArray(widgetData.notes) ? widgetData.notes : [],
calculator: widgetData && widgetData.calculator ? widgetData.calculator.history || [] : [],
timerPresets: widgetData && widgetData.timer ? widgetData.timer.presets || [] : []
@@ -78,6 +79,36 @@ function initDataButtons() {
await saveBoards();
renderBoards();
// Papierkorb importieren (falls vorhanden) — defensiv validiert.
if (Array.isArray(data.trash) && data.trash.length > 0) {
const validTrash = data.trash
.filter(e => e && e.item && ['bookmark', 'board'].includes(e.type) && typeof e.deletedAt === 'number')
.map(e => ({
type: e.type,
originBoardId: typeof e.originBoardId === 'string' ? e.originBoardId : null,
deletedAt: e.deletedAt,
item: e.type === 'board'
? {
id: e.item.id || uid(),
title: String(e.item.title || '').slice(0, 100),
blurred: !!e.item.blurred,
bookmarks: Array.isArray(e.item.bookmarks)
? e.item.bookmarks
.filter(bm => bm && typeof bm.title === 'string' && isSafeUrl(bm.url))
.map(bm => ({ id: bm.id || uid(), title: String(bm.title).slice(0, 200), url: bm.url, desc: String(bm.desc || '').slice(0, 500) }))
: []
}
: (isSafeUrl(e.item.url)
? { id: e.item.id || uid(), title: String(e.item.title || '').slice(0, 200), url: e.item.url, desc: String(e.item.desc || '').slice(0, 500) }
: null)
}))
.filter(e => e.item !== null);
if (validTrash.length > 0) {
trash = [...trash, ...validTrash].slice(-TRASH_MAX_ENTRIES);
await saveTrash();
}
}
// Notes importieren (falls vorhanden)
let notesImported = 0;
const existingWidgets = await Store.get('widgetStates') || {};