From 841bc54f7818d76f7eb470e10d9732527e4f2e57 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 10 Mar 2025 19:14:46 +0200 Subject: [PATCH] feat(edit-docs): preserve IDs when importing --- electron-docs-main.ts | 4 +--- src/services/import/zip.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/electron-docs-main.ts b/electron-docs-main.ts index 9b00e52c1..e12cc1ac5 100644 --- a/electron-docs-main.ts +++ b/electron-docs-main.ts @@ -42,8 +42,6 @@ async function importData(input: Buffer) { const notes = ((await import("./src/services/notes.js")).default); beccaLoader.load(); - const becca = ((await import("./src/becca/becca.js")).default); - const { note } = notes.createNewNoteWithTarget("into", "none_root", { parentNoteId: "root", noteId: NOTE_ID_USER_GUIDE, @@ -55,7 +53,7 @@ async function importData(input: Buffer) { const TaskContext = (await import("./src/services/task_context.js")).default; const { importZip } = ((await import("./src/services/import/zip.js")).default); const context = new TaskContext("no-report"); - await importZip(context, input, note); + await importZip(context, input, note, { preserveIds: true }); } async function createImportZip() { diff --git a/src/services/import/zip.ts b/src/services/import/zip.ts index ab4a21adc..9cf943006 100644 --- a/src/services/import/zip.ts +++ b/src/services/import/zip.ts @@ -26,7 +26,11 @@ interface MetaFile { files: NoteMeta[]; } -async function importZip(taskContext: TaskContext, fileBuffer: Buffer, importRootNote: BNote): Promise { +interface ImportZipOpts { + preserveIds?: boolean; +} + +async function importZip(taskContext: TaskContext, fileBuffer: Buffer, importRootNote: BNote, opts?: ImportZipOpts): Promise { /** maps from original noteId (in ZIP file) to newly generated noteId */ const noteIdMap: Record = {}; /** type maps from original attachmentId (in ZIP file) to newly generated attachmentId */ @@ -45,7 +49,7 @@ async function importZip(taskContext: TaskContext, fileBuffer: Buffer, importRoo return "empty_note_id"; } - if (origNoteId === "root" || origNoteId.startsWith("_")) { + if (origNoteId === "root" || origNoteId.startsWith("_") || opts?.preserveIds) { // these "named" noteIds don't differ between Trilium instances return origNoteId; } @@ -490,6 +494,10 @@ async function importZip(taskContext: TaskContext, fileBuffer: Buffer, importRoo notePosition: noteMeta?.notePosition }).save(); } + + if (opts?.preserveIds) { + firstNote = firstNote || note; + } } else { ({ note } = noteService.createNewNote({ parentNoteId: parentNoteId,