diff --git a/nodes/xilica-listen.html b/nodes/xilica-listen.html
index 58f364f..cc93f85 100644
--- a/nodes/xilica-listen.html
+++ b/nodes/xilica-listen.html
@@ -5,7 +5,7 @@ RED.nodes.registerType('xilica-listen', {
defaults: {
name: { value: "" },
connection: { value: "", type: "xilica-connection" },
- rules: { value: [] }
+ rules: { value: "[]" }
},
inputs: 1,
outputs: 1,
@@ -18,15 +18,10 @@ RED.nodes.registerType('xilica-listen', {
},
oneditprepare: function () {
var node = this;
- var rules = node.rules || [];
- if (typeof rules === "string") {
- try {
- rules = JSON.parse(rules);
- } catch (e) {
- rules = [];
- }
- }
- if (!Array.isArray(rules)) {
+ var rules;
+ try {
+ rules = node.rules ? JSON.parse(node.rules) : [];
+ } catch (e) {
rules = [];
}
@@ -118,7 +113,7 @@ RED.nodes.registerType('xilica-listen', {
rules.push(rule);
});
- this.rules = rules;
+ this.rules = JSON.stringify(rules);
}
});
diff --git a/nodes/xilica-listen.js b/nodes/xilica-listen.js
index e98706b..f3e240e 100644
--- a/nodes/xilica-listen.js
+++ b/nodes/xilica-listen.js
@@ -54,7 +54,15 @@ module.exports = function (RED) {
RED.nodes.createNode(this, config);
const node = this;
- node.rules = Array.isArray(config.rules) ? config.rules : [];
+ let storedRules = config.rules;
+ if (typeof storedRules === "string") {
+ try {
+ storedRules = JSON.parse(storedRules);
+ } catch (e) {
+ storedRules = [];
+ }
+ }
+ node.rules = Array.isArray(storedRules) ? storedRules : [];
node.on("input", (msg, send, done) => {
send =
@@ -76,7 +84,17 @@ module.exports = function (RED) {
return;
}
- const rules = Array.isArray(msg.rules) ? msg.rules : node.rules;
+ let rules = msg.rules || node.rules;
+ if (typeof rules === "string") {
+ try {
+ rules = JSON.parse(rules);
+ } catch (e) {
+ rules = [];
+ }
+ }
+ if (!Array.isArray(rules)) {
+ rules = [];
+ }
const names = buildControlNamesFromRules(rules);
const matchAll = names.length === 0;
const allowed = new Set(names);
@@ -139,4 +157,3 @@ module.exports = function (RED) {
RED.nodes.registerType("xilica-listen", XilicaListen);
};
-
diff --git a/nodes/xilica-subscribe.html b/nodes/xilica-subscribe.html
index 7244690..76e5a84 100644
--- a/nodes/xilica-subscribe.html
+++ b/nodes/xilica-subscribe.html
@@ -6,7 +6,7 @@ RED.nodes.registerType('xilica-subscribe', {
name: { value: "" },
action: { value: "subscribe" },
connection: { value: "", type: "xilica-connection" },
- rules: { value: [] },
+ rules: { value: "[]" },
transport: { value: "TCP" }
},
inputs: 1,
@@ -21,15 +21,10 @@ RED.nodes.registerType('xilica-subscribe', {
},
oneditprepare: function () {
var node = this;
- var rules = node.rules || [];
- if (typeof rules === "string") {
- try {
- rules = JSON.parse(rules);
- } catch (e) {
- rules = [];
- }
- }
- if (!Array.isArray(rules)) {
+ var rules;
+ try {
+ rules = node.rules ? JSON.parse(node.rules) : [];
+ } catch (e) {
rules = [];
}
@@ -121,7 +116,7 @@ RED.nodes.registerType('xilica-subscribe', {
rules.push(rule);
});
- this.rules = rules;
+ this.rules = JSON.stringify(rules);
}
});
diff --git a/nodes/xilica-subscribe.js b/nodes/xilica-subscribe.js
index 879da1f..9491aac 100644
--- a/nodes/xilica-subscribe.js
+++ b/nodes/xilica-subscribe.js
@@ -65,7 +65,15 @@ module.exports = function (RED) {
const node = this;
node.action = config.action || "subscribe";
- node.rules = Array.isArray(config.rules) ? config.rules : [];
+ let storedRules = config.rules;
+ if (typeof storedRules === "string") {
+ try {
+ storedRules = JSON.parse(storedRules);
+ } catch (e) {
+ storedRules = [];
+ }
+ }
+ node.rules = Array.isArray(storedRules) ? storedRules : [];
node.transport = config.transport || "TCP";
node.connectionConfig = RED.nodes.getNode(config.connection);
@@ -78,7 +86,17 @@ module.exports = function (RED) {
done = done || function () {};
const action = normaliseAction(msg.action || node.action);
- const rules = Array.isArray(msg.rules) ? msg.rules : node.rules;
+ let rules = msg.rules || node.rules;
+ if (typeof rules === "string") {
+ try {
+ rules = JSON.parse(rules);
+ } catch (e) {
+ rules = [];
+ }
+ }
+ if (!Array.isArray(rules)) {
+ rules = [];
+ }
const transport =
typeof msg.transport === "string" && msg.transport.trim().length