Files
nextcloud-collabora-nodered/nodes/collabora-convert.js
T

61 lines
2.3 KiB
JavaScript

'use strict';
const { getConfig, setError, setSuccess, clearStatus, pickMsgField } = require('../lib/utils');
const { convertTo } = require('../lib/collabora');
const { loadSourceBuffer } = require('../lib/bridge');
const { webdavGet } = require('../lib/webdav');
module.exports = function (RED) {
function CollaboraConvertNode(config) {
RED.nodes.createNode(this, config);
const node = this;
node.configNode = RED.nodes.getNode(config.config);
node.operation = config.operation || 'convert';
node.format = config.format || 'pdf';
node.on('input', async (msg, send, done) => {
send = send || function () { node.send.apply(node, arguments); };
done = done || function (err) { if (err) { node.error(err, msg); } };
clearStatus(node);
try {
const cfg = getConfig(node);
const format = (pickMsgField(msg, 'format') || node.format).toLowerCase();
const source = await loadSourceBuffer(cfg, msg);
const extraFields = [];
if (msg.templateNcPath) {
const tpl = await webdavGet(cfg, msg.templateNcPath);
extraFields.push({ name: 'template', buffer: tpl.buffer, filename: tpl.filename });
}
if (msg.compareNcPath) {
const cmp = await webdavGet(cfg, msg.compareNcPath);
extraFields.push({ name: 'file', buffer: cmp.buffer, filename: cmp.filename });
}
const result = await convertTo(cfg, {
buffer: source.buffer,
filename: source.filename,
format,
extraFields
});
msg.payload = result.buffer;
msg.format = format;
msg.contentType = result.contentType;
msg.statusCode = result.statusCode;
msg.filename = source.filename;
setSuccess(node, msg, `convert → ${format}`);
send(msg);
done();
} catch (err) {
setError(node, msg, err);
send(msg);
done(err);
}
});
}
RED.nodes.registerType('collabora-convert', CollaboraConvertNode);
};