Merge branch 'master' into master

This commit is contained in:
sonics007 2024-11-21 14:41:36 +01:00 committed by GitHub
commit 4b59427561
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 15 deletions

View File

@ -288,7 +288,7 @@ RED.view = (function() {
} }
selectedLinks.clearUnselected() selectedLinks.clearUnselected()
}, },
length: () => groups.length, length: () => groups.size,
forEach: (func) => { groups.forEach(func) }, forEach: (func) => { groups.forEach(func) },
toArray: () => [...groups], toArray: () => [...groups],
clear: function () { clear: function () {
@ -2689,22 +2689,21 @@ RED.view = (function() {
addToRemovedLinks(reconnectResult.removedLinks) addToRemovedLinks(reconnectResult.removedLinks)
} }
var startDirty = RED.nodes.dirty(); const startDirty = RED.nodes.dirty();
var startChanged = false; let movingSelectedGroups = [];
var selectedGroups = [];
if (movingSet.length() > 0) { if (movingSet.length() > 0) {
for (var i=0;i<movingSet.length();i++) { for (var i=0;i<movingSet.length();i++) {
node = movingSet.get(i).n; node = movingSet.get(i).n;
if (node.type === "group") { if (node.type === "group") {
selectedGroups.push(node); movingSelectedGroups.push(node);
} }
} }
// Make sure we have identified all groups about to be deleted // Make sure we have identified all groups about to be deleted
for (i=0;i<selectedGroups.length;i++) { for (i=0;i<movingSelectedGroups.length;i++) {
selectedGroups[i].nodes.forEach(function(n) { movingSelectedGroups[i].nodes.forEach(function(n) {
if (n.type === "group" && selectedGroups.indexOf(n) === -1) { if (n.type === "group" && movingSelectedGroups.indexOf(n) === -1) {
selectedGroups.push(n); movingSelectedGroups.push(n);
} }
}) })
} }
@ -2721,7 +2720,7 @@ RED.view = (function() {
addToRemovedLinks(removedEntities.links); addToRemovedLinks(removedEntities.links);
if (node.g) { if (node.g) {
var group = RED.nodes.group(node.g); var group = RED.nodes.group(node.g);
if (selectedGroups.indexOf(group) === -1) { if (movingSelectedGroups.indexOf(group) === -1) {
// Don't use RED.group.removeFromGroup as that emits // Don't use RED.group.removeFromGroup as that emits
// a change event on the node - but we're deleting it // a change event on the node - but we're deleting it
var index = group.nodes.indexOf(node); var index = group.nodes.indexOf(node);
@ -2735,7 +2734,7 @@ RED.view = (function() {
removedLinks = removedLinks.concat(result.links); removedLinks = removedLinks.concat(result.links);
if (node.g) { if (node.g) {
var group = RED.nodes.group(node.g); var group = RED.nodes.group(node.g);
if (selectedGroups.indexOf(group) === -1) { if (movingSelectedGroups.indexOf(group) === -1) {
// Don't use RED.group.removeFromGroup as that emits // Don't use RED.group.removeFromGroup as that emits
// a change event on the node - but we're deleting it // a change event on the node - but we're deleting it
var index = group.nodes.indexOf(node); var index = group.nodes.indexOf(node);
@ -2757,8 +2756,8 @@ RED.view = (function() {
// Groups must be removed in the right order - from inner-most // Groups must be removed in the right order - from inner-most
// to outermost. // to outermost.
for (i = selectedGroups.length-1; i>=0; i--) { for (i = movingSelectedGroups.length-1; i>=0; i--) {
var g = selectedGroups[i]; var g = movingSelectedGroups[i];
removedGroups.push(g); removedGroups.push(g);
RED.nodes.removeGroup(g); RED.nodes.removeGroup(g);
} }

View File

@ -253,7 +253,13 @@ module.exports = function(RED) {
if (node.allowrate && m.hasOwnProperty("rate") && !isNaN(parseFloat(m.rate))) { if (node.allowrate && m.hasOwnProperty("rate") && !isNaN(parseFloat(m.rate))) {
node.rate = m.rate; node.rate = m.rate;
} }
send(m); if (msg.hasOwnProperty("reset")) {
if (msg.hasOwnProperty("flush")) {
node.buffer.push({msg: m, send: send, done: done});
}
}
else { send(m); }
node.reportDepth(); node.reportDepth();
node.intervalID = setInterval(sendMsgFromBuffer, node.rate); node.intervalID = setInterval(sendMsgFromBuffer, node.rate);
done(); done();
@ -303,7 +309,8 @@ module.exports = function(RED) {
node.droppedMsgs++; node.droppedMsgs++;
} }
} }
} else { }
else {
if (node.allowrate && msg.hasOwnProperty("rate") && !isNaN(parseFloat(msg.rate))) { if (node.allowrate && msg.hasOwnProperty("rate") && !isNaN(parseFloat(msg.rate))) {
node.rate = msg.rate; node.rate = msg.rate;
} }

View File

@ -113,6 +113,10 @@ async function evaluateEnvProperties(flow, env, credentials) {
resolve() resolve()
}); });
})) }))
} else if (type === "conf-type" && /^\${[^}]+}$/.test(value)) {
// Get the config node from the parent subflow
const name = value.substring(2, value.length - 1);
value = flow.getSetting(name);
} else { } else {
try { try {
value = redUtil.evaluateNodeProperty(value, type, {_flow: flow}, null, null); value = redUtil.evaluateNodeProperty(value, type, {_flow: flow}, null, null);

View File

@ -1009,6 +1009,29 @@ describe('delay Node', function() {
}); });
}); });
it('sending a msg with reset to empty queue doesnt send anything', function(done) {
this.timeout(2000);
var flow = [{"id":"delayNode1","type":"delay","name":"delayNode","pauseType":"rate","timeout":1,"timeoutUnits":"seconds","rate":2,"rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"wires":[["helperNode1"]]},
{id:"helperNode1", type:"helper", wires:[]}];
helper.load(delayNode, flow, function() {
var delayNode1 = helper.getNode("delayNode1");
var helperNode1 = helper.getNode("helperNode1");
var t = Date.now();
var c = 0;
helperNode1.on("input", function(msg) {
console.log("Shold not get here")
done(e);
});
setTimeout( function() {
if (c === 0) { done(); }
}, 250);
// send test messages
delayNode1.receive({payload:1,topic:"foo",reset:true}); // send something with blank topic
});
});
/* Messaging API support */ /* Messaging API support */
function mapiDoneTestHelper(done, pauseType, drop, msgAndTimings) { function mapiDoneTestHelper(done, pauseType, drop, msgAndTimings) {
const completeNode = require("nr-test-utils").require("@node-red/nodes/core/common/24-complete.js"); const completeNode = require("nr-test-utils").require("@node-red/nodes/core/common/24-complete.js");