mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
fix export/import for multi-valued attributes
This commit is contained in:
parent
d169f67901
commit
8c7d159012
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user