UNPKG

iobroker.schedule-switcher

Version:
207 lines (206 loc) 7.01 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var AstroTriggerScheduler_exports = {}; __export(AstroTriggerScheduler_exports, { AstroTriggerScheduler: () => AstroTriggerScheduler }); module.exports = __toCommonJS(AstroTriggerScheduler_exports); var import_AstroTrigger = require("../triggers/AstroTrigger"); var import_TimeTriggerBuilder = require("../triggers/TimeTriggerBuilder"); var import_TriggerScheduler = require("./TriggerScheduler"); class AstroTriggerScheduler extends import_TriggerScheduler.TriggerScheduler { //private readonly rescheduleTrigger = new TimeTriggerBuilder() // .setId(`AstroTriggerScheduler-Rescheduler`) // .setWeekdays(AllWeekdays) // .setHour(2) // .setMinute(0) // .setObjectId(1000) // .setValueCheck(false) // .setTodayTrigger({}) // .setAction({ // execute: () => { // this.logger.logDebug(`Rescheduling astro triggers`); // for (const s of this.scheduled) { // this.timeTriggerScheduler.unregister(s[1]); // } // //for (const r of this.registered) { // // this.tryScheduleTriggerToday(r); // //} // this.loadregister(); // this.timeTriggerScheduler.loadregister(); // }, // }) // .build(); /** * @param timeTriggerScheduler Scheduler * @param getTimes GetTimesResult * @param coordinate Coodinate * @param logger Log service */ constructor(timeTriggerScheduler, getTimes, coordinate, logger) { super(); this.timeTriggerScheduler = timeTriggerScheduler; this.getTimes = getTimes; this.coordinate = coordinate; this.logger = logger; } registered = []; scheduled = []; /** * @param trigger Trigger */ register(trigger) { this.logger.logDebug(`Register astro trigger ${trigger}`); if (this.isRegistered(trigger)) { this.logger.logWarn(`AstroTrigger ${trigger} is already registered.`); this.loadregister(); } else { this.registered.push(trigger); this.tryScheduleTriggerToday(trigger); } } /** * @param trigger Trigger */ unregister(trigger) { this.logger.logDebug(`Unregister astro trigger ${trigger}`); if (this.isRegistered(trigger)) { this.registered = this.registered.filter((t) => t.getId() !== trigger.getId()); if (this.isScheduledToday(trigger)) { this.scheduled = this.scheduled.filter((s) => { if (s[0] === trigger.getId()) { this.timeTriggerScheduler.unregister(s[1]); return false; } return true; }); } else { this.logger.logDebug(`AstroTrigger ${trigger} is not today.`); this.loadregister(); } } else { this.logger.logWarn(`AstroTrigger ${trigger} is not registered.`); this.loadregister(); } } /** * loadregister */ loadregister() { for (const r of this.registered) { this.logger.logDebug(`Check AstroTriggerRegistered ${r}`); } for (const s of this.scheduled) { this.logger.logDebug(`Check AstroTriggerScheduler ${s[1]}`); } } /** * destroy */ destroy() { this.timeTriggerScheduler.destroy(); this.registered = []; this.scheduled = []; } /** * forType * * @returns trigger action on/off */ forType() { return import_AstroTrigger.AstroTrigger.prototype.constructor.name; } /** * create next astro schedule * * @param trigger trigger */ tryScheduleTriggerToday(trigger) { const now = /* @__PURE__ */ new Date(); const next = this.nextDate(trigger); this.logger.logDebug(`Time ${next.toString()} - Date ${now.toString()}`); if (next >= now && trigger.getWeekdays().includes(now.getDay())) { const entry = this.registered.find((t) => t.getId() === trigger.getId()); const objectId = entry && typeof entry.getObjectId() === "number" ? entry.getObjectId() : 0; const valueCheck = entry && typeof entry.getValueCheck() === "boolean" ? entry.getValueCheck() : false; this.removeScheduled(trigger); const timeTrigger = new import_TimeTriggerBuilder.TimeTriggerBuilder().setId(`TimeTriggerForAstroTrigger:${trigger.getId()}`).setHour(next.getHours()).setMinute(next.getMinutes()).setObjectId(objectId).setValueCheck(valueCheck).setTodayTrigger({ hour: next.getHours(), minute: next.getMinutes(), weekday: next.getDay(), date: next }).setWeekdays([next.getDay()]).setAction({ execute: () => { this.logger.logDebug(`Executing astrotrigger ${trigger}`); const trigger_data = JSON.parse(JSON.stringify(trigger.getData())); trigger.getAction().execute(trigger_data); this.timeTriggerScheduler.unregister(timeTrigger); } }).build(); this.logger.logDebug(`Scheduled astro with ${timeTrigger}`); this.timeTriggerScheduler.register(timeTrigger); this.scheduled.push([trigger.getId(), timeTrigger]); } else { this.logger.logDebug(`Didn't schedule ${trigger}`); } } /** * is registered check * * @param trigger trigger * @returns boolean */ isRegistered(trigger) { return this.registered.find((r) => r.getId() === trigger.getId()) != void 0; } /** * is schedule today * * @param trigger trigger * @returns boolean */ isScheduledToday(trigger) { return this.scheduled.find((s) => s[0] === trigger.getId()) != void 0; } /** * remove trigger * * @param trigger trigger */ removeScheduled(trigger) { this.logger.logDebug(`Scheduled remove ${trigger}`); this.scheduled = this.scheduled.filter((s) => s[0] !== trigger.getId()); } /** * Next date * * @param trigger trigger * @returns Date */ nextDate(trigger) { const next = this.getTimes(/* @__PURE__ */ new Date(), this.coordinate.getLatitude(), this.coordinate.getLongitude())[trigger.getAstroTime()]; next.setMinutes(next.getMinutes() + trigger.getShiftInMinutes()); return next; } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { AstroTriggerScheduler }); //# sourceMappingURL=AstroTriggerScheduler.js.map