From c472e3e852160cadaf2148e342f7cf29c26d6a83 Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Sat, 25 Dec 2021 21:09:08 -0800 Subject: [PATCH] Add support for editing id field. --- src/card.ts | 4 ++-- src/components/live.ts | 2 -- src/const.ts | 1 + src/editor.ts | 4 +++- src/localize/languages/en.json | 3 ++- src/types.ts | 4 +++- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/card.ts b/src/card.ts index 5f7a7c6a..ad7b0a74 100644 --- a/src/card.ts +++ b/src/card.ts @@ -415,10 +415,10 @@ export class FrigateCard extends LitElement { } if (config.camera_name) { - const id = config.card_id || config.camera_entity || config.camera_name; + const id = config.id || config.camera_entity || config.camera_name; if (cameras.has(id)) { this._setMessageAndUpdate({ - message: localize('error.duplicate_frigate_camera_name'), + message: localize('error.duplicate_camera_id'), type: 'error', }); errorFree = false; diff --git a/src/components/live.ts b/src/components/live.ts index 800b25b2..13309306 100644 --- a/src/components/live.ts +++ b/src/components/live.ts @@ -1,5 +1,3 @@ -// TODO reconsider card_id, and using entity (which is unique) as that id -// TODO rename card_id to id? // TODO webrtc entities in camera section? // TODO conditional elements based on camera name (requires event changed to propagate upwards) // TODO change url to frigate_url? Would need to also fix upgrade logic to refer to new name. diff --git a/src/const.ts b/src/const.ts index 342ace13..bd5eeca9 100644 --- a/src/const.ts +++ b/src/const.ts @@ -9,6 +9,7 @@ export const CONF_CAMERAS_ARRAY_CLIENT_ID = 'cameras.#.client_id'; export const CONF_CAMERAS_ARRAY_LABEL = 'cameras.#.label'; export const CONF_CAMERAS_ARRAY_URL = 'cameras.#.url'; export const CONF_CAMERAS_ARRAY_ZONE = 'cameras.#.zone'; +export const CONF_CAMERAS_ARRAY_ID = 'cameras.#.id'; export const CONF_VIEW_DEFAULT = 'view.default'; export const CONF_VIEW_TIMEOUT = 'view.timeout'; diff --git a/src/editor.ts b/src/editor.ts index 14dc096e..336f0415 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -16,6 +16,7 @@ import { CONF_CAMERAS_ARRAY_CAMERA_ENTITY, CONF_CAMERAS_ARRAY_CAMERA_NAME, CONF_CAMERAS_ARRAY_CLIENT_ID, + CONF_CAMERAS_ARRAY_ID, CONF_CAMERAS_ARRAY_LABEL, CONF_CAMERAS_ARRAY_URL, CONF_CAMERAS_ARRAY_ZONE, @@ -280,7 +281,7 @@ export class FrigateCardEditor extends LitElement implements LovelaceCardEditor // ways towards the least useful. html` ${cameraConfig?.title || - cameraConfig?.card_id || + cameraConfig?.id || [ cameraConfig?.camera_entity ? getEntityTitle(this.hass, String(cameraConfig.camera_entity)) @@ -407,6 +408,7 @@ export class FrigateCardEditor extends LitElement implements LovelaceCardEditor ${this._renderStringInput(getArrayPath(CONF_CAMERAS_ARRAY_LABEL))} ${this._renderStringInput(getArrayPath(CONF_CAMERAS_ARRAY_ZONE))} ${this._renderStringInput(getArrayPath(CONF_CAMERAS_ARRAY_CLIENT_ID))} + ${this._renderStringInput(getArrayPath(CONF_CAMERAS_ARRAY_ID))} ` : ``} `; diff --git a/src/localize/languages/en.json b/src/localize/languages/en.json index c9b03eb5..670c9136 100644 --- a/src/localize/languages/en.json +++ b/src/localize/languages/en.json @@ -13,6 +13,7 @@ "camera_entity": "Camera Entity", "camera_name": "Frigate camera name (Autodetected from entity)", "client_id": "Frigate client id (For >1 Frigate server)", + "id": "Unique id for this camera in this card", "label": "Frigate label/object filter", "url": "Frigate server URL", "zone": "Frigate zone" @@ -157,7 +158,7 @@ "upgrade_available": "An automated card configuration upgrade is available, please visit the visual card editor", "missing_webrtc": "WebRTC component not found", "no_cameras": "No valid cameras found, you must configure at least one camera with either a camera_entity or camera_name", - "duplicate_frigate_camera_name": "Duplicate Frigate camera name, use the 'card_id' parameter to uniquely identify them", + "duplicate_camera_id": "Duplicate Frigate camera, use the 'id' parameter to uniquely identify cameras with the same 'camera_entity' or 'camera_name'", "could_not_render_elements": "Could not render picture elements", "invalid_elements_config": "Invalid picture elements configuration", "jsmpeg_no_sign": "Could not retrieve or sign JSMPEG websocket path", diff --git a/src/types.ts b/src/types.ts index 68bc2b20..562328c8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -369,7 +369,9 @@ const cameraConfigDefaultSchema = z icon: z.string().optional(), title: z.string().optional(), - card_id: z.string().optional(), + // Optional identifier to separate different camera configurations used in + // this card. + id: z.string().optional(), }) .default(cameraConfigDefault); export type CameraConfig = z.infer;