clone msg for every single line output

(this may not be desired)
Add tests to ensure properties go trhough
This commit is contained in:
Dave Conway-Jones
2019-10-25 15:09:20 +01:00
parent c8b8beda6a
commit 7c4e782c60
2 changed files with 80 additions and 33 deletions

View File

@@ -140,8 +140,8 @@ module.exports = function(RED) {
try {
var stat = fs.statSync(filename);
node.wstreamIno = stat.ino;
} catch(err) {
}
}
catch(err) { }
});
node.wstream.on("error", function(err) {
node.error(RED._("file.errors.appendfail",{error:err.toString()}),msg);
@@ -276,7 +276,6 @@ module.exports = function(RED) {
ch = "\n";
type = "string";
}
var hwm;
var getout = false;
var rs = fs.createReadStream(filename)
@@ -290,30 +289,24 @@ module.exports = function(RED) {
spare += decode(chunk, node.encoding);
var bits = spare.split("\n");
for (var i=0; i < bits.length - 1; i++) {
var m = {
payload:bits[i],
topic:msg.topic,
filename:msg.filename,
parts:{index:count, ch:ch, type:type, id:msg._msgid}
}
var sendMessage = RED.util.cloneMessage(msg);
sendMessage.payload = bits[i];
sendMessage.parts = {index:count, ch:ch, type:type, id:msg._msgid};
count += 1;
nodeSend(m);
nodeSend(sendMessage);
}
spare = bits[i];
}
if (node.format === "stream") {
var m = {
payload:chunk,
topic:msg.topic,
filename:msg.filename,
parts:{index:count, ch:ch, type:type, id:msg._msgid}
}
var sendMessage = RED.util.cloneMessage(msg);
sendMessage.payload = chunk;
sendMessage.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
getout = false;
m.parts.count = count;
sendMessage.parts.count = count;
}
nodeSend(m);
nodeSend(sendMessage);
}
}
else {
@@ -332,28 +325,23 @@ module.exports = function(RED) {
nodeDone();
})
.on('end', function() {
var sendMessage = RED.util.cloneMessage(msg);
if (node.chunk === false) {
if (node.format === "utf8") {
msg.payload = decode(lines, node.encoding);
sendMessage.payload = decode(lines, node.encoding);
}
else { msg.payload = lines; }
nodeSend(msg);
else { sendMessage.payload = lines; }
nodeSend(sendMessage);
}
else if (node.format === "lines") {
var m = { payload: spare,
parts: {
index: count,
count: count+1,
ch: ch,
type: type,
id: msg._msgid
}
};
nodeSend(m);
sendMessage.payload = spare;
sendMessage.parts = { index:count, count:count+1, ch:ch, type:type, id:msg._msgid };
nodeSend(sendMessage);
}
else if (getout) { // last chunk same size as high water mark - have to send empty extra packet.
var m = { parts:{index:count, count:count, ch:ch, type:type, id:msg._msgid} };
nodeSend(m);
delete sendMessage.payload;
sendMessage.parts = { parts:{index:count, count:count, ch:ch, type:type, id:msg._msgid} };
nodeSend(sendMessage);
}
nodeDone();
});