From 4a3b224ce2f2cf0efe3835fdf854889b66ded0f1 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Fri, 12 Apr 2024 11:02:43 +0100 Subject: [PATCH] Update file node to support Property Out --- .../@node-red/nodes/core/storage/10-file.html | 23 ++++++++++++++----- .../@node-red/nodes/core/storage/10-file.js | 14 ++++++----- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.html b/packages/node_modules/@node-red/nodes/core/storage/10-file.html index 57d028ead..a0edf255d 100644 --- a/packages/node_modules/@node-red/nodes/core/storage/10-file.html +++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.html @@ -1,5 +1,9 @@ @@ -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 diff --git a/packages/node_modules/@node-red/nodes/core/storage/10-file.js b/packages/node_modules/@node-red/nodes/core/storage/10-file.js index fea8c490e..aa3976626 100644 --- a/packages/node_modules/@node-red/nodes/core/storage/10-file.js +++ b/packages/node_modules/@node-red/nodes/core/storage/10-file.js @@ -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,