From 15d33f63fb8b2bff65ae0123506832741a17e89a Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Sat, 21 Sep 2024 13:17:22 -0700 Subject: [PATCH] fix: Destroy cameras after failed initialization (#1551) --- src/camera-manager/manager.ts | 9 +++++++-- src/scss/message.scss | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/camera-manager/manager.ts b/src/camera-manager/manager.ts index 8a6af9a3..4879914f 100644 --- a/src/camera-manager/manager.ts +++ b/src/camera-manager/manager.ts @@ -237,14 +237,18 @@ export class CameraManager { async ([cameraConfig, engine]) => await engine.createCamera(hass, cameraConfig), ); + const destroyCameras = async () => { + cameras.forEach((camera) => camera.destroy()); + }; const cameraIDs: Set = new Set(); // Do the additions based off the result-order, to ensure the map order is // preserved. - cameras.forEach((camera) => { + for (const camera of cameras) { const cameraID = getCameraID(camera.getConfig()); if (!cameraID) { + await destroyCameras(); throw new CameraInitializationError( localize('error.no_camera_id'), camera.getConfig(), @@ -252,6 +256,7 @@ export class CameraManager { } if (cameraIDs.has(cameraID)) { + await destroyCameras(); throw new CameraInitializationError( localize('error.duplicate_camera_id'), camera.getConfig(), @@ -261,7 +266,7 @@ export class CameraManager { // Always ensure the actual ID used in the card is in the configuration itself. camera.setID(cameraID); cameraIDs.add(cameraID); - }); + } await this._store.setCameras(cameras); diff --git a/src/scss/message.scss b/src/scss/message.scss index 63427729..75d2347d 100644 --- a/src/scss/message.scss +++ b/src/scss/message.scss @@ -57,5 +57,5 @@ div.message div.icon { .message pre { margin-top: 20px; - overflow-x: scroll; + overflow-x: auto; }