mirror of https://github.com/node-red/node-red.git
Merge 0c15a8e382
into 1eb9aa0eed
commit
04fa2385c2
|
@ -18,6 +18,8 @@
|
|||
<div class="form-row node-input-filename">
|
||||
<label for="node-input-files"><i class="fa fa-file"></i> <span data-i18n="watch.label.files"></span></label>
|
||||
<input id="node-input-files" type="text" tabindex="1" data-i18n="[placeholder]watch.placeholder.files">
|
||||
<!-- added to enable context type setup -->
|
||||
<input type="hidden" id="node-input-filesType">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label> </label>
|
||||
|
@ -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").typedInput("type") === "msg" ? 1 : 0;
|
||||
return;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</script>
|
|
@ -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() {
|
||||
if (node.watcher) node.watcher.close();
|
||||
}
|
||||
}
|
||||
RED.nodes.registerType("watch", WatchNode);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue