Update file node to support Property Out

This commit is contained in:
Steve-Mcl 2024-04-12 11:02:43 +01:00
parent f1e54c959b
commit 4a3b224ce2
2 changed files with 25 additions and 12 deletions

View File

@ -1,5 +1,9 @@
<script type="text/html" data-template-name="file">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<input type="text" id="node-input-name">
</div>
<div class="form-row node-input-filename">
<label for="node-input-filename"><i class="fa fa-file"></i> <span data-i18n="file.label.filename"></span></label>
<input id="node-input-filename" type="text">
@ -28,14 +32,14 @@
<select type="text" id="node-input-encoding" style="width: 250px;">
</select>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<input type="text" id="node-input-name">
</div>
<div class="form-tips"><span data-i18n="file.tip"></span></div>
</script>
<script type="text/html" data-template-name="file in">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<input type="text" id="node-input-name">
</div>
<div class="form-row">
<label for="node-input-filename"><i class="fa fa-file"></i> <span data-i18n="file.label.filename"></span></label>
<input id="node-input-filename" type="text">
@ -61,8 +65,8 @@
</select>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<input type="text" id="node-input-name">
<label for="node-input-propertyOut"><i class="fa fa-sign-out"></i> <span data-i18n="common.label.propertyOut"></span></label>
<input type="text" id="node-input-propertyOut" style="width:70%;"/>
</div>
<div class="form-tips"><span data-i18n="file.tip"></span></div>
</script>
@ -299,6 +303,9 @@
name: {value:""},
filename: {value:"", validate: RED.validators.typedInput({ typeField: 'filenameType' }) },
filenameType: {value:"str"},
propertyOut: {value:"payload",required:true,
validate: RED.validators.typedInput({ type: 'msg', allowUndefined: true}),
label:RED._("node-red:common.label.propertyOut")},
format: {value:"utf8"},
chunk: {value:false},
sendError: {value: false},
@ -345,6 +352,10 @@
types: [{label:RED._("node-red:file.label.path"), value:"str", icon:""}, "msg", "jsonata", "env"],
typeField: $("#node-input-filenameType")
});
if (this.propertyOut === undefined) {
$("#node-input-propertyOut").val("payload");
}
$("#node-input-propertyOut").typedInput({default:'msg',types:['msg']});
if(typeof node.filenameType == 'undefined') {
//existing node AND filenameType is not set - inplace (compatible) upgrade to new typedInput
if(node.filename == "") { //was using empty value to denote msg.filename - set typedInput to match

View File

@ -286,6 +286,7 @@ module.exports = function(RED) {
RED.nodes.createNode(this,n);
this.filename = n.filename;
this.filenameType = n.filenameType;
this.propertyOut = n.propertyOut || "payload";
this.format = n.format;
this.chunk = false;
this.encoding = n.encoding || "none";
@ -370,7 +371,7 @@ module.exports = function(RED) {
m.topic = msg.topic;
m.filename = msg.filename;
}
m.payload = bits[i];
RED.util.setMessageProperty(m,node.propertyOut,bits[i]);
m.parts= {index:count, ch:ch, type:type, id:msg._msgid}
count += 1;
nodeSend(m);
@ -386,7 +387,7 @@ module.exports = function(RED) {
m.topic = msg.topic;
m.filename = msg.filename;
}
m.payload = chunk;
RED.util.setMessageProperty(m,node.propertyOut,chunk);
m.parts = {index:count, ch:ch, type:type, id:msg._msgid}
count += 1;
if (chunk.length < hwm) { // last chunk is smaller that high water mark = eof
@ -405,7 +406,7 @@ module.exports = function(RED) {
node.error(err, msg);
if (node.sendError) {
var sendMessage = RED.util.cloneMessage(msg);
delete sendMessage.payload;
delete sendMessage[node.propertyOut];
sendMessage.error = err;
nodeSend(sendMessage);
}
@ -414,9 +415,10 @@ module.exports = function(RED) {
.on('end', function() {
if (node.chunk === false) {
if (node.format === "utf8") {
msg.payload = decode(lines, node.encoding);
RED.util.setMessageProperty(m,node.propertyOut,decode(lines, node.encoding));
} else {
RED.util.setMessageProperty(m,node.propertyOut,lines);
}
else { msg.payload = lines; }
nodeSend(msg);
}
else if (node.format === "lines") {
@ -428,7 +430,7 @@ module.exports = function(RED) {
m.topic = msg.topic;
m.filename = msg.filename;
}
m.payload = spare;
RED.util.setMessageProperty(m,node.propertyOut,spare);
m.parts = {
index: count,
count: count + 1,