mirror of
https://github.com/zadam/trilium.git
synced 2025-10-31 18:36:30 +01:00
downloading note revisions
This commit is contained in:
@@ -2,6 +2,9 @@
|
||||
|
||||
const repository = require('../../services/repository');
|
||||
const noteCacheService = require('../../services/note_cache');
|
||||
const protectedSessionService = require('../../services/protected_session');
|
||||
const utils = require('../../services/utils');
|
||||
const path = require('path');
|
||||
|
||||
async function getNoteRevisions(req) {
|
||||
const {noteId} = req.params;
|
||||
@@ -16,15 +19,66 @@ async function getNoteRevisions(req) {
|
||||
async function getNoteRevision(req) {
|
||||
const noteRevision = await repository.getNoteRevision(req.params.noteRevisionId);
|
||||
|
||||
await noteRevision.getContent();
|
||||
if (noteRevision.type !== 'file') {
|
||||
await noteRevision.getContent();
|
||||
|
||||
if (noteRevision.content && ['file', 'image'].includes(noteRevision.type)) {
|
||||
noteRevision.content = noteRevision.content.toString('base64');
|
||||
if (noteRevision.content && noteRevision.type === 'image') {
|
||||
noteRevision.content = noteRevision.content.toString('base64');
|
||||
}
|
||||
}
|
||||
|
||||
return noteRevision;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {NoteRevision} noteRevision
|
||||
* @return {string}
|
||||
*/
|
||||
function getRevisionFilename(noteRevision) {
|
||||
let filename = noteRevision.title || "untitled";
|
||||
|
||||
if (noteRevision.type === 'text') {
|
||||
filename += '.html';
|
||||
} else if (['relation-map', 'search'].includes(noteRevision.type)) {
|
||||
filename += '.json';
|
||||
}
|
||||
|
||||
const extension = path.extname(filename);
|
||||
const date = noteRevision.dateCreated
|
||||
.substr(0, 19)
|
||||
.replace(' ', '_')
|
||||
.replace(/[^0-9_]/g, '');
|
||||
|
||||
if (extension) {
|
||||
filename = filename.substr(0, filename.length - extension.length)
|
||||
+ '-' + date + extension;
|
||||
}
|
||||
else {
|
||||
filename += '-' + date;
|
||||
}
|
||||
|
||||
return filename;
|
||||
}
|
||||
|
||||
async function downloadNoteRevision(req, res) {
|
||||
const noteRevision = await repository.getNoteRevision(req.params.noteRevisionId);
|
||||
|
||||
if (noteRevision.noteId !== req.params.noteId) {
|
||||
return res.status(400).send(`Note revision ${req.params.noteRevisionId} does not belong to note ${req.params.noteId}`);
|
||||
}
|
||||
|
||||
if (noteRevision.isProtected && !protectedSessionService.isProtectedSessionAvailable()) {
|
||||
return res.status(401).send("Protected session not available");
|
||||
}
|
||||
|
||||
const filename = getRevisionFilename(noteRevision);
|
||||
|
||||
res.setHeader('Content-Disposition', utils.getContentDisposition(filename));
|
||||
res.setHeader('Content-Type', noteRevision.mime);
|
||||
|
||||
res.send(await noteRevision.getContent());
|
||||
}
|
||||
|
||||
async function getEditedNotesOnDate(req) {
|
||||
const date = req.params.date;
|
||||
|
||||
@@ -48,5 +102,6 @@ async function getEditedNotesOnDate(req) {
|
||||
module.exports = {
|
||||
getNoteRevisions,
|
||||
getNoteRevision,
|
||||
downloadNoteRevision,
|
||||
getEditedNotesOnDate
|
||||
};
|
||||
Reference in New Issue
Block a user