From ba5f5c4978284960547f30e7e0028cd01516a293 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Sun, 14 Jun 2026 10:02:31 +0200 Subject: [PATCH] v2.3 Papierkorb: Export/Import um trash erweitern (defensiv validiert) --- src/js/data.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/js/data.js b/src/js/data.js index 1ffa85f..815d99d 100644 --- a/src/js/data.js +++ b/src/js/data.js @@ -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') || {};