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