From ca0765d3d2368f2bd31c0e00995b0565c0f85bfe Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Tue, 16 Mar 2021 18:21:31 +0000 Subject: [scheduler] bugfix --- server/bin/scheduler.js | 2 +- server/lib/eventhelper.js | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/server/bin/scheduler.js b/server/bin/scheduler.js index e9adf1b..5a5e3a8 100644 --- a/server/bin/scheduler.js +++ b/server/bin/scheduler.js @@ -38,7 +38,7 @@ async function calcNextWake (id) { var now = new Date() if (!times.repetitive) { - nextWake = new Date(times.start * 1000) + nextWake = new Date(times.start) if (nextWake > now) { runningTimeouts[id] = setTimeoutAt(function () { wakeUpClients(id) diff --git a/server/lib/eventhelper.js b/server/lib/eventhelper.js index e5d54f3..e051620 100644 --- a/server/lib/eventhelper.js +++ b/server/lib/eventhelper.js @@ -16,29 +16,30 @@ const rruleWeekdays = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR, RRule.S class Schedule { constructor (event) { - const splitStart = event.start.split(' ') + const times = JSON.parse(event.times) + const splitStart = times.start.split(' ') const splitStartTime = splitStart[1].split(':') const rule = { - dtstart: new Date(event.start + 'Z'), - until: new Date(event.end + 'Z'), - interval: event.interval, + dtstart: new Date(times.start + 'Z'), + until: new Date(times.end + 'Z'), + interval: times.interval, byhour: [splitStartTime[0]], byminute: [splitStartTime[1]], - byweekday: event.dayMap.reduce((arr, v, i) => { if (v) arr.push(rruleWeekdays[i]); return arr }, []), - bymonth: event.monthMap.reduce((arr, v, i) => { if (v) arr.push(i + 1); return arr }, []) + byweekday: times.dayMap.reduce((arr, v, i) => { if (v) arr.push(rruleWeekdays[i]); return arr }, []), + bymonth: times.monthMap.reduce((arr, v, i) => { if (v) arr.push(i + 1); return arr }, []) } - if (event.intervalType === 'month') rule.freq = RRule.MONTHLY - else if (event.intervalType === 'week') rule.freq = RRule.WEEKLY + if (times.intervalType === 'month') rule.freq = RRule.MONTHLY + else if (times.intervalType === 'week') rule.freq = RRule.WEEKLY else rule.freq = RRule.DAILY this.rrule = new RRule(rule) - this.endTime = event.end.split(' ')[1] + this.endTime = times.end.split(' ')[1] } next () { const now = formatDate(new Date()) - return _fakeUTCToDate(this.rrule.after(now + 'Z')) + return _fakeUTCToDate(this.rrule.after(new Date(now + 'Z'))) } isValid (date) { @@ -55,9 +56,10 @@ class Schedule { } function isActive (event) { + const times = JSON.parse(event.times) const now = formatDate(new Date()) - if (now < event.start || event.end < now) return false - if (event.repetitive) return (new Schedule(event)).isValid(now) + if (now < times.start || times.end < now) return false + if (times.repetitive) return (new Schedule(event)).isValid(now) else return true } -- cgit v1.2.3-55-g7522