UNPKG

homebridge-pjlink

Version:

Homebridge accessory for PJLink supported projectors

63 lines 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PJLinkPlatform = void 0; const PJLinkPlatformAccessory_1 = require("./PJLinkPlatformAccessory"); const settings_1 = require("./settings"); class PJLinkPlatform { constructor(log, config, api) { this.log = log; this.config = config; this.api = api; this.accessories = []; this.api.on("didFinishLaunching" /* DID_FINISH_LAUNCHING */, () => { this.log.debug('Load PJLink accessories'); this.discoverDevices(); }); } configureAccessory(accessory) { this.accessories.push(accessory); } discoverDevices() { const c = this.config; const retiredAccessories = this.accessories.slice(); const devices = c.devices; if (devices) { devices.forEach((device) => { const name = device.name; const ip = device.ip; const port = device.port || 4352; // use identifier or generate based on ip+port const id = device.id || `pjlink://${ip}:${port}`; const uuid = this.api.hap.uuid.generate(id); const existingAccessory = this.accessories.find(accesory => accesory.UUID === uuid); if (existingAccessory) { this.log.info('Restoring existing accessory from cache:', existingAccessory.displayName, uuid); new PJLinkPlatformAccessory_1.PJLinkPlatformAccessory(this.log, this.api, device, this, existingAccessory); this.api.updatePlatformAccessories([existingAccessory]); // remove from retired devices const retiredIndex = retiredAccessories.indexOf(existingAccessory); if (retiredIndex > -1) { retiredAccessories.splice(retiredIndex, 1); } } else { // console.log('new accessory', name, uuid); if (!name || name === '') { this.log.error('PJLink device must be created with a non-empty name'); } else { const accessory = new this.api.platformAccessory(name, uuid); accessory.context.device = device; new PJLinkPlatformAccessory_1.PJLinkPlatformAccessory(this.log, this.api, device, this, accessory); this.api.publishExternalAccessories(settings_1.PLUGIN_NAME, [accessory]); } } }); } // clean up unused accessories this.log.info('removing retired accessories:', retiredAccessories); this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, retiredAccessories); } } exports.PJLinkPlatform = PJLinkPlatform; //# sourceMappingURL=PJLinkPlatform.js.map