v2.3 Papierkorb: Export/Import um trash erweitern (defensiv validiert)
This commit is contained in:
@@ -32,6 +32,7 @@ function initDataButtons() {
|
|||||||
exported: new Date().toISOString(),
|
exported: new Date().toISOString(),
|
||||||
boards,
|
boards,
|
||||||
settings,
|
settings,
|
||||||
|
trash,
|
||||||
notes: widgetData && Array.isArray(widgetData.notes) ? widgetData.notes : [],
|
notes: widgetData && Array.isArray(widgetData.notes) ? widgetData.notes : [],
|
||||||
calculator: widgetData && widgetData.calculator ? widgetData.calculator.history || [] : [],
|
calculator: widgetData && widgetData.calculator ? widgetData.calculator.history || [] : [],
|
||||||
timerPresets: widgetData && widgetData.timer ? widgetData.timer.presets || [] : []
|
timerPresets: widgetData && widgetData.timer ? widgetData.timer.presets || [] : []
|
||||||
@@ -78,6 +79,36 @@ function initDataButtons() {
|
|||||||
await saveBoards();
|
await saveBoards();
|
||||||
renderBoards();
|
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)
|
// Notes importieren (falls vorhanden)
|
||||||
let notesImported = 0;
|
let notesImported = 0;
|
||||||
const existingWidgets = await Store.get('widgetStates') || {};
|
const existingWidgets = await Store.get('widgetStates') || {};
|
||||||
|
|||||||
Reference in New Issue
Block a user