mirror of
https://github.com/zadam/trilium.git
synced 2025-11-02 03:16:11 +01:00
added progress also to export
This commit is contained in:
@@ -4,22 +4,76 @@ const tarExportService = require('../../services/export/tar');
|
||||
const singleExportService = require('../../services/export/single');
|
||||
const opmlExportService = require('../../services/export/opml');
|
||||
const repository = require("../../services/repository");
|
||||
const messagingService = require("../../services/messaging");
|
||||
const log = require("../../services/log");
|
||||
|
||||
class ExportContext {
|
||||
constructor(exportId) {
|
||||
// exportId is to distinguish between different export events - it is possible (though not recommended)
|
||||
// to have multiple exports going at the same time
|
||||
this.exportId = exportId;
|
||||
// count is mean to represent count of exported notes where practical, otherwise it's just some measure of progress
|
||||
this.progressCount = 0;
|
||||
this.lastSentCountTs = Date.now();
|
||||
}
|
||||
|
||||
async increaseProgressCount() {
|
||||
this.progressCount++;
|
||||
|
||||
if (Date.now() - this.lastSentCountTs >= 200) {
|
||||
this.lastSentCountTs = Date.now();
|
||||
|
||||
await messagingService.sendMessageToAllClients({
|
||||
exportId: this.exportId,
|
||||
type: 'export-progress-count',
|
||||
progressCount: this.progressCount
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async exportFinished() {
|
||||
await messagingService.sendMessageToAllClients({
|
||||
exportId: this.exportId,
|
||||
type: 'export-finished'
|
||||
});
|
||||
}
|
||||
|
||||
// must remaing static
|
||||
async reportError(message) {
|
||||
await messagingService.sendMessageToAllClients({
|
||||
type: 'export-error',
|
||||
message: message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function exportBranch(req, res) {
|
||||
const {branchId, type, format} = req.params;
|
||||
const {branchId, type, format, exportId} = req.params;
|
||||
const branch = await repository.getBranch(branchId);
|
||||
|
||||
if (type === 'subtree' && (format === 'html' || format === 'markdown')) {
|
||||
await tarExportService.exportToTar(branch, format, res);
|
||||
const exportContext = new ExportContext(exportId);
|
||||
|
||||
try {
|
||||
if (type === 'subtree' && (format === 'html' || format === 'markdown')) {
|
||||
await tarExportService.exportToTar(exportContext, branch, format, res);
|
||||
}
|
||||
else if (type === 'single') {
|
||||
await singleExportService.exportSingleNote(exportContext, branch, format, res);
|
||||
}
|
||||
else if (format === 'opml') {
|
||||
await opmlExportService.exportToOpml(exportContext, branch, res);
|
||||
}
|
||||
else {
|
||||
return [404, "Unrecognized export format " + format];
|
||||
}
|
||||
}
|
||||
else if (type === 'single') {
|
||||
await singleExportService.exportSingleNote(branch, format, res);
|
||||
}
|
||||
else if (format === 'opml') {
|
||||
await opmlExportService.exportToOpml(branch, res);
|
||||
}
|
||||
else {
|
||||
return [404, "Unrecognized export format " + format];
|
||||
catch (e) {
|
||||
const message = "Export failed with following error: '" + e.message + "'. More details might be in the logs.";
|
||||
exportContext.reportError(message);
|
||||
|
||||
log.error(message + e.stack);
|
||||
|
||||
res.status(500).send(message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user