diff --git a/packages/node_modules/@node-red/nodes/core/storage/23-watch.html b/packages/node_modules/@node-red/nodes/core/storage/23-watch.html
index b2bd12f80..69d3a14d9 100644
--- a/packages/node_modules/@node-red/nodes/core/storage/23-watch.html
+++ b/packages/node_modules/@node-red/nodes/core/storage/23-watch.html
@@ -18,6 +18,8 @@
+
+
@@ -37,11 +39,15 @@
defaults: {
name: {value:""},
files: {value:"",required:true,
- label:RED._("node-red:watch.label.files")},
- recursive: {value:""}
+ label:RED._("node-red:watch.label.files")},
+ // property added to enable context type setup
+ filesType: {value: "str"},
+ recursive: {value:""},
+ // property added to enable number of inputs change
+ inputs: {value:0}
},
color:"BurlyWood",
- inputs:0,
+ inputs: 0,
outputs:1,
icon: "watch.svg",
label: function() {
@@ -49,6 +55,20 @@
},
labelStyle: function() {
return this.name?"node_label_italic":"";
+ },
+ // function added to enable context type setup
+ oneditprepare: function() {
+ $("#node-input-files").typedInput({
+ default: 'str',
+ types: ['str','flow','global','env','msg'],
+ typeField: $("#node-input-filesType")
+ });
+ },
+ // function added to set node input number
+ oneditsave: function() {
+ // if controlled by msg there has to be a input
+ this.inputs = $("#node-input-filesType")[0].attributes.value.value == "msg"?1:0;
+ return;
}
});
-
+
\ No newline at end of file
diff --git a/packages/node_modules/@node-red/nodes/core/storage/23-watch.js b/packages/node_modules/@node-red/nodes/core/storage/23-watch.js
index ccbdeba9f..2ee5770aa 100644
--- a/packages/node_modules/@node-red/nodes/core/storage/23-watch.js
+++ b/packages/node_modules/@node-red/nodes/core/storage/23-watch.js
@@ -20,20 +20,17 @@ module.exports = function(RED) {
const fs = require("fs")
const path = require("path")
- function WatchNode(n) {
- RED.nodes.createNode(this,n);
-
- this.recursive = n.recursive || false;
- this.files = (n.files || "").split(",");
- for (var f=0; f < this.files.length; f++) {
- this.files[f] = this.files[f].trim();
+ function configureWatcher(node, n) {
+ if (node.filesType != 'msg') node.files = (n.files || "");
+ node.files = node.files.split(",");
+ for (var f=0; f < node.files.length; f++) {
+ node.files[f] = node.files[f].trim();
}
- this.p = (this.files.length === 1) ? this.files[0] : JSON.stringify(this.files);
- const node = this;
+ node.p = (node.files.length === 1) ? node.files[0] : JSON.stringify(node.files);
- const watcher = watch(this.files, { recursive: this.recursive });
+ node.watcher = watch(node.files, { recursive: node.recursive });
- watcher.on('change', function (event, fpath) {
+ node.watcher.on('change', function (event, fpath) {
const file = path.basename(fpath)
let stat;
try {
@@ -60,14 +57,45 @@ module.exports = function(RED) {
node.send(msg);
});
- watcher.on('error', function (error) {
+ node.watcher.on('error', function (error) {
const msg = { payload: "" };
node.error(error,msg);
});
+ };
+
+ function WatchNode(n) {
+ RED.nodes.createNode(this,n);
+ var node = this;
+ node.recursive = n.recursive || false;
+ node.files = n.files || "";
+ node.filesType = n.filesType || "str";
+ node.inputs = n.inputs || 0;
+ // added to enable context setup
+ switch (n.filesType) {
+ case "global":
+ n.files = node.context().global.get(`${n.files}`);
+ break;
+ case "flow":
+ n.files = node.context().flow.get(`${n.files}`);
+ break;
+ case "env":
+ n.files = node.context().env.get(`${n.files}`);
+ case "msg":
+ node.on('input', function(msg) {
+ if (msg[n.files] != node.files) { // new path/files list received
+ if (node.watcher) node.watcher.close(); // if watcher active close it
+ node.files = msg[n.files]; // save new path/files list
+ configureWatcher(node, n); // reconfigure watcher
+ };
+ });
+ break;
+ };
- this.close = function() {
- watcher.close();
+ if (n.filesType != 'msg') configureWatcher(node, n);
+
+ node.close = function() {
+ node.watcher.close();
}
}
RED.nodes.registerType("watch", WatchNode);
-}
+}
\ No newline at end of file