mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	fix export/import for multi-valued attributes
This commit is contained in:
		| @@ -3,21 +3,22 @@ | |||||||
| const express = require('express'); | const express = require('express'); | ||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
| const sql = require('../../services/sql'); | const sql = require('../../services/sql'); | ||||||
| const attributes = require('../../services/attributes'); |  | ||||||
| const html = require('html'); | const html = require('html'); | ||||||
| const auth = require('../../services/auth'); | const auth = require('../../services/auth'); | ||||||
| const wrap = require('express-promise-wrap').wrap; | const wrap = require('express-promise-wrap').wrap; | ||||||
| const tar = require('tar-stream'); | const tar = require('tar-stream'); | ||||||
| const sanitize = require("sanitize-filename"); | const sanitize = require("sanitize-filename"); | ||||||
|  | const Repository = require("../../services/repository"); | ||||||
|  |  | ||||||
| router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next) => { | router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next) => { | ||||||
|     const noteId = req.params.noteId; |     const noteId = req.params.noteId; | ||||||
|  |     const repo = new Repository(req); | ||||||
|  |  | ||||||
|     const noteTreeId = await sql.getValue('SELECT noteTreeId FROM note_tree WHERE noteId = ?', [noteId]); |     const noteTreeId = await sql.getValue('SELECT noteTreeId FROM note_tree WHERE noteId = ?', [noteId]); | ||||||
|  |  | ||||||
|     const pack = tar.pack(); |     const pack = tar.pack(); | ||||||
|  |  | ||||||
|     const name = await exportNote(noteTreeId, '', pack); |     const name = await exportNote(noteTreeId, '', pack, repo); | ||||||
|  |  | ||||||
|     pack.finalize(); |     pack.finalize(); | ||||||
|  |  | ||||||
| @@ -27,9 +28,9 @@ router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next) | |||||||
|     pack.pipe(res); |     pack.pipe(res); | ||||||
| })); | })); | ||||||
|  |  | ||||||
| async function exportNote(noteTreeId, directory, pack) { | async function exportNote(noteTreeId, directory, pack, repo) { | ||||||
|     const noteTree = await sql.getRow("SELECT * FROM note_tree WHERE noteTreeId = ?", [noteTreeId]); |     const noteTree = await sql.getRow("SELECT * FROM note_tree WHERE noteTreeId = ?", [noteTreeId]); | ||||||
|     const note = await sql.getRow("SELECT * FROM notes WHERE noteId = ?", [noteTree.noteId]); |     const note = await repo.getEntity("SELECT notes.* FROM notes WHERE noteId = ?", [noteTree.noteId]); | ||||||
|  |  | ||||||
|     if (note.isProtected) { |     if (note.isProtected) { | ||||||
|         return; |         return; | ||||||
| @@ -54,7 +55,7 @@ async function exportNote(noteTreeId, directory, pack) { | |||||||
|  |  | ||||||
|     if (children.length > 0) { |     if (children.length > 0) { | ||||||
|         for (const child of children) { |         for (const child of children) { | ||||||
|             await exportNote(child.noteTreeId, childFileName + "/", pack); |             await exportNote(child.noteTreeId, childFileName + "/", pack, repo); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -66,7 +67,12 @@ async function getMetadata(note) { | |||||||
|         title: note.title, |         title: note.title, | ||||||
|         type: note.type, |         type: note.type, | ||||||
|         mime: note.mime, |         mime: note.mime, | ||||||
|         attributes: await attributes.getNoteAttributeMap(note.noteId) |         attributes: (await note.getAttributes()).map(attr => { | ||||||
|  |             return { | ||||||
|  |                 name: attr.name, | ||||||
|  |                 value: attr.value | ||||||
|  |             }; | ||||||
|  |         }) | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ const express = require('express'); | |||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
| const sql = require('../../services/sql'); | const sql = require('../../services/sql'); | ||||||
| const auth = require('../../services/auth'); | const auth = require('../../services/auth'); | ||||||
|  | const attributes = require('../../services/attributes'); | ||||||
| const notes = require('../../services/notes'); | const notes = require('../../services/notes'); | ||||||
| const wrap = require('express-promise-wrap').wrap; | const wrap = require('express-promise-wrap').wrap; | ||||||
| const tar = require('tar-stream'); | const tar = require('tar-stream'); | ||||||
| @@ -118,10 +119,13 @@ async function importNotes(files, parentNoteId, sourceId) { | |||||||
|         const noteId = await notes.createNote(parentNoteId, file.meta.title, file.data, { |         const noteId = await notes.createNote(parentNoteId, file.meta.title, file.data, { | ||||||
|             type: file.meta.type, |             type: file.meta.type, | ||||||
|             mime: file.meta.mime, |             mime: file.meta.mime, | ||||||
|             attributes: file.meta.attributes, |  | ||||||
|             sourceId: sourceId |             sourceId: sourceId | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         for (const attr of file.meta.attributes) { | ||||||
|  |             await attributes.createAttribute(noteId, attr.name, attr.value); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (file.children.length > 0) { |         if (file.children.length > 0) { | ||||||
|             await importNotes(file.children, noteId, sourceId); |             await importNotes(file.children, noteId, sourceId); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -62,12 +62,14 @@ async function createAttribute(noteId, name, value = "", sourceId = null) { | |||||||
|  |  | ||||||
|     const now = utils.nowDate(); |     const now = utils.nowDate(); | ||||||
|     const attributeId = utils.newAttributeId(); |     const attributeId = utils.newAttributeId(); | ||||||
|  |     const position = 1 + await sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [noteId]); | ||||||
|  |  | ||||||
|     await sql.insert("attributes", { |     await sql.insert("attributes", { | ||||||
|         attributeId: attributeId, |         attributeId: attributeId, | ||||||
|         noteId: noteId, |         noteId: noteId, | ||||||
|         name: name, |         name: name, | ||||||
|         value: value, |         value: value, | ||||||
|  |         position: position, | ||||||
|         dateModified: now, |         dateModified: now, | ||||||
|         dateCreated: now, |         dateCreated: now, | ||||||
|         isDeleted: false |         isDeleted: false | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user