UNPKG

node-red-contrib-ical-events

Version:
1 lines 3.97 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var crypto=require("crypto-js"),cron_1=require("cron"),parser=require("cron-parser"),helper_1=require("./helper"),NodeCache=require("node-cache"),moment=require("moment");module.exports=function(e){function t(t,o,n,s){var i=e.util.cloneMessage(s);delete i._msgid,delete t.id,o([Object.assign(i,{payload:t})]),n&&n()}function o(t,o,n,s){var i=e.util.cloneMessage(s);delete i._msgid,delete t.id,o([null,Object.assign(i,{payload:t})]),n&&n()}e.nodes.registerType("ical-events",function(n){e.nodes.createNode(this,n);var s=this,i={};try{s.cache=new NodeCache,s.msg={},s.timezone=n.timezone,s.on("input",function(r,a,c){s.msg=e.util.cloneMessage(r),a=a||function(){s.send.apply(s,arguments)},s.config=(0,helper_1.getConfig)(e.nodes.getNode(n.confignode),e,n,r),function(n,s,i,r,a,c,u){var d=new Map;n.job&&n.job.running?n.status({fill:"green",shape:"dot",text:"next check: ".concat(n.job.nextDate().toLocaleString())}):n.status({});var f=moment().utc().toDate(),l=[];(0,helper_1.getICal)(n,e,u).then(function(e){var a,u,m,g,p,v,h;if(e){for(var y in e)if(e.hasOwnProperty(y)){var b=e[y],D=moment(b.eventStart).utc().toDate(),S=moment(b.eventEnd).utc().toDate();if(n.config.offset&&("seconds"===(null===(a=n.config)||void 0===a?void 0:a.offsetUnits)?(D.setSeconds(D.getSeconds()+n.config.offset),S.setSeconds(S.getSeconds()+n.config.offset)):"hours"===(null===(u=n.config)||void 0===u?void 0:u.offsetUnits)?(D.setHours(D.getHours()+n.config.offset),S.setHours(S.getHours()+n.config.offset)):"days"===(null===(m=n.config)||void 0===m?void 0:m.offsetUnits)?(D.setDate(D.getDate()+n.config.offset),S.setDate(S.getDate()+n.config.offset)):(D.setMinutes(D.getMinutes()+n.config.offset),S.setMinutes(S.getMinutes()+n.config.offset))),D>f){var j=crypto.MD5(b.uid+(null===(g=b.summary)||void 0===g?void 0:g.val)?b.summary.val:b.summary+"start").toString();b.uid&&(j=(b.uid.uid?b.uid.uid:b.uid)+D.toISOString()+"start"),l.push(j);var w=Object.assign(b,{topic:(null===(p=b.summary)||void 0===p?void 0:p.val)?b.summary.val:b.summary,id:j,calendarName:b.calendarName||n.config.name}),O=new cron_1.CronJob(moment(D),t.bind(null,w,i,r,s)),x=c[j];x&&x.stop(),d.set(j,O)}if(S>f){var j=crypto.MD5(b.uid+(null===(v=b.summary)||void 0===v?void 0:v.val)?b.summary.val:b.summary+"end").toString();b.uid&&(j=(b.uid.uid?b.uid.uid:b.uid)+S.toISOString()+"end"),l.push(j);var M=Object.assign(b,{topic:(null===(h=b.summary)||void 0===h?void 0:h.val)?b.summary.val:b.summary,id:j,calendarName:b.calendarName||n.config.name}),O=new cron_1.CronJob(moment(S),o.bind(null,M,i,r,s)),x=c[j];x&&x.stop(),d.set(j,O)}}if(d){var _=[];d.forEach(function(e,t){try{var o=e.nextDates();o.toDate()>f&&(_.push(o.toString()),e.start(),n.debug("starting - "+t),c[t]=e)}catch(e){n.warn(e)}}),_.sort(function(e,t){return new Date(e).valueOf()-new Date(t).valueOf()}),_.length>0&&n.status({text:"next trigger: ".concat(_[0].toLocaleString()),fill:"green",shape:"dot"})}d.clear()}for(var N in c)c.hasOwnProperty(N)&&(0==c[N].running?delete c[N]:l.includes(N,0)||(c[N].stop(),delete c[N]))}).catch(function(e){n.status({fill:"red",shape:"ring",text:e.message}),i({error:e}),r&&r(e)})}(s,r,a,c,n.confignode,i,n)}),s.on("close",function(){if(s.debug("cron stopped"),i)for(var e in i)i.hasOwnProperty(e)&&(s.debug(e+" stopped"),i[e].stop())});var r="";if(n.timeout&&""!==n.timeout&&parseInt(n.timeout)>0&&n.timeoutUnits&&""!==n.timeoutUnits)switch(n.timeoutUnits){case"seconds":r="*/".concat(n.timeout," * * * * *");break;case"minutes":r="0 */".concat(n.timeout," * * * *");break;case"hours":r="0 0 */".concat(n.timeout," * * *");break;case"days":r="0 0 0 */".concat(n.timeout," * *")}n.cron&&""!==n.cron&&(parser.parseExpression(n.cron),r=n.cron),""!==r&&(s.job=new cron_1.CronJob(r,function(){s.emit("input",{})}),s.job.start(),s.on("close",function(){s.job.stop()}))}catch(e){s.error("Error: "+e.message),s.status({fill:"red",shape:"ring",text:e.message})}})};