From 4f51063c418920a4563b98331994d6a87d3743da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20Hagelb=C3=A4ck?= Date: Mon, 1 Feb 2021 21:18:42 +0100 Subject: [PATCH] Break out central DeviceRegistry for all Plejd data --- plejd/DeviceRegistry.js | 73 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 plejd/DeviceRegistry.js diff --git a/plejd/DeviceRegistry.js b/plejd/DeviceRegistry.js new file mode 100644 index 0000000..1a26df4 --- /dev/null +++ b/plejd/DeviceRegistry.js @@ -0,0 +1,73 @@ +class DeviceRegistry { + apiSite; + cryptoKey = null; + + deviceIdsByRoom = {}; + deviceIdsBySerial = {}; + + // Dictionaries of [id]: device per type + plejdDevices = {}; + roomDevices = {}; + sceneDevices = {}; + + get allDevices() { + return [ + ...Object.values(this.plejdDevices), + ...Object.values(this.roomDevices), + ...Object.values(this.sceneDevices), + ]; + } + + addPlejdDevice(device) { + this.plejdDevices[device.id] = device; + this.deviceIdsBySerial[device.serialNumber] = device.id; + if (!this.deviceIdsByRoom[device.roomId]) { + this.deviceIdsByRoom[device.roomId] = []; + } + this.deviceIdsByRoom[device.roomId].push(device.id); + } + + addScene(scene) { + this.plejdDevices[scene.id] = scene; + } + + setApiSite(siteDetails) { + this.apiSite = siteDetails; + } + + clearPlejdDevices() { + this.plejdDevices = {}; + this.deviceIdsByRoom = {}; + this.deviceIdsBySerial = {}; + } + + addRoomDevice(device) { + this.roomDevices[device.id] = device; + } + + clearRoomDevices() { + this.roomDevices = {}; + } + + clearSceneDevices() { + this.sceneDevices = {}; + } + + getDevice(deviceId) { + return this.plejdDevices[deviceId]; + } + + getDeviceBySerialNumber(serialNumber) { + return this.plejdDevices[this.deviceIdsBySerial[serialNumber]]; + } + + getDeviceName(deviceId) { + return (this.plejdDevices[deviceId] || {}).name; + } + + getSceneName(sceneId) { + return (this.sceneDevices[sceneId] || {}).name; + } +} + +module.exports = DeviceRegistry;