mirror of
https://github.com/zadam/trilium.git
synced 2025-11-13 08:45:50 +01:00
implemented audio/video in note content renderer + streaming API #886
This commit is contained in:
@@ -6,6 +6,7 @@ const utils = require('../../services/utils');
|
||||
const noteRevisionService = require('../../services/note_revisions');
|
||||
const tmp = require('tmp');
|
||||
const fs = require('fs');
|
||||
const { Readable } = require('stream');
|
||||
|
||||
function updateFile(req) {
|
||||
const {noteId} = req.params;
|
||||
@@ -73,6 +74,38 @@ function openFile(req, res) {
|
||||
return downloadNoteFile(noteId, res, false);
|
||||
}
|
||||
|
||||
function fileContentProvider(req) {
|
||||
// Read file name from route params.
|
||||
const note = repository.getNote(req.params.noteId);
|
||||
const fileName = getFilename(note);
|
||||
let content = note.getContent();
|
||||
|
||||
if (typeof content === "string") {
|
||||
content = Buffer.from(content, 'utf8');
|
||||
}
|
||||
|
||||
const totalSize = content.byteLength;
|
||||
const mimeType = note.mime;
|
||||
|
||||
const getStream = range => {
|
||||
if (!range) {
|
||||
// Request if for complete content.
|
||||
return Readable.from(content);
|
||||
}
|
||||
// Partial content request.
|
||||
const { start, end } = range;
|
||||
|
||||
return Readable.from(content.slice(start, end + 1));
|
||||
}
|
||||
|
||||
return {
|
||||
fileName,
|
||||
totalSize,
|
||||
mimeType,
|
||||
getStream
|
||||
};
|
||||
}
|
||||
|
||||
function saveToTmpDir(req) {
|
||||
const noteId = req.params.noteId;
|
||||
|
||||
@@ -95,6 +128,7 @@ function saveToTmpDir(req) {
|
||||
module.exports = {
|
||||
updateFile,
|
||||
openFile,
|
||||
fileContentProvider,
|
||||
downloadFile,
|
||||
downloadNoteFile,
|
||||
saveToTmpDir
|
||||
|
||||
@@ -48,6 +48,8 @@ const sql = require('../services/sql');
|
||||
const protectedSessionService = require('../services/protected_session');
|
||||
const entityChangesService = require('../services/entity_changes.js');
|
||||
const csurf = require('csurf');
|
||||
const {createPartialContentHandler} = require("express-partial-content");
|
||||
|
||||
|
||||
const csrfMiddleware = csurf({
|
||||
cookie: true,
|
||||
@@ -175,7 +177,10 @@ function register(app) {
|
||||
route(PUT, '/api/notes/:noteId/file', [auth.checkApiAuthOrElectron, uploadMiddleware, csrfMiddleware],
|
||||
filesRoute.updateFile, apiResultHandler);
|
||||
|
||||
route(GET, '/api/notes/:noteId/open', [auth.checkApiAuthOrElectron], filesRoute.openFile);
|
||||
route(GET, '/api/notes/:noteId/open', [auth.checkApiAuthOrElectron],
|
||||
createPartialContentHandler(filesRoute.fileContentProvider, {
|
||||
debug: (string, extra) => { console.log(string, extra); }
|
||||
}));
|
||||
route(GET, '/api/notes/:noteId/download', [auth.checkApiAuthOrElectron], filesRoute.downloadFile);
|
||||
// this "hacky" path is used for easier referencing of CSS resources
|
||||
route(GET, '/api/notes/download/:noteId', [auth.checkApiAuthOrElectron], filesRoute.downloadFile);
|
||||
|
||||
Reference in New Issue
Block a user