homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
112 lines • 5.33 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
import { Inject, Injectable } from '@nestjs/common';
import { cancelJob, RecurrenceRule, scheduledJobs, scheduleJob } from 'node-schedule';
import { ConfigService } from '../config/config.service.js';
import { HomebridgeIpcService } from '../homebridge-ipc/homebridge-ipc.service.js';
import { Logger } from '../logger/logger.service.js';
let SchedulerService = class SchedulerService {
configService;
homebridgeIpcService;
logger;
scheduleJob = scheduleJob;
scheduledJobs = scheduledJobs;
cancelJob = cancelJob;
RecurrenceRule = RecurrenceRule;
constructor(configService, homebridgeIpcService, logger) {
this.configService = configService;
this.homebridgeIpcService = homebridgeIpcService;
this.logger = logger;
}
onModuleInit() {
try {
void this.refreshRestartSchedules();
}
catch (error) {
this.logger.warn(`Failed to initialize restart schedules: ${error.message}`);
}
}
async refreshRestartSchedules(config) {
Object.keys(this.scheduledJobs)
.filter(name => name.startsWith('restart-homebridge') || name.startsWith('restart-child-'))
.forEach((name) => {
try {
this.cancelJob(name);
}
catch (e) { }
});
const cfg = config || this.configService.homebridgeConfig;
const ui = this.configService.ui;
const mainBridgeCron = ui?.scheduledRestartCron;
if (mainBridgeCron && mainBridgeCron.trim()) {
const name = 'restart-homebridge';
try {
this.scheduleJob(name, mainBridgeCron, () => {
this.logger.warn('Running scheduled restart of main Homebridge...');
try {
this.homebridgeIpcService.restartHomebridge();
}
catch (error) {
this.logger.warn(`Scheduled restart (main) failed: ${error.message}`);
}
});
this.logger.debug(`Scheduled main Homebridge restart with cron "${mainBridgeCron}".`);
}
catch (error) {
this.logger.warn(`Failed to schedule main Homebridge restart cron="${mainBridgeCron}": ${error.message}`);
}
}
const blocks = [
...(cfg.platforms || []),
...(cfg.accessories || []),
];
for (const block of blocks) {
const bridge = block._bridge;
if (bridge?.username) {
const normalizedUsername = bridge.username.toUpperCase();
const bridgeConfig = ui.bridges?.find(b => b.username.toUpperCase() === normalizedUsername);
const childBridgeCron = bridgeConfig?.scheduledRestartCron;
if (childBridgeCron && childBridgeCron.trim()) {
const deviceId = bridge.username.replace(/:/g, '').toUpperCase();
const name = `restart-child-${deviceId}`;
try {
this.scheduleJob(name, childBridgeCron, () => {
this.logger.warn(`Running scheduled restart of child bridge ${bridge.username}...`);
try {
this.homebridgeIpcService.sendMessage('restartChildBridge', bridge.username);
}
catch (error) {
this.logger.warn(`Scheduled restart (child ${bridge.username}) failed: ${error.message}`);
}
});
this.logger.debug(`Scheduled child bridge restart ${bridge.username} with cron "${childBridgeCron}".`);
}
catch (error) {
this.logger.warn(`Failed to schedule child bridge ${bridge.username} restart cron="${childBridgeCron}": ${error.message}`);
}
}
}
}
}
};
SchedulerService = __decorate([
Injectable(),
__param(0, Inject(ConfigService)),
__param(1, Inject(HomebridgeIpcService)),
__param(2, Inject(Logger)),
__metadata("design:paramtypes", [ConfigService,
HomebridgeIpcService,
Logger])
], SchedulerService);
export { SchedulerService };
//# sourceMappingURL=scheduler.service.js.map