Fix defaults overriding intentional values.

This commit is contained in:
Dermot Duffy
2023-03-04 10:03:16 -08:00
parent 0b7c2131df
commit 9870446a9f
3 changed files with 29 additions and 18 deletions
+16 -8
View File
@@ -1,9 +1,5 @@
import { HomeAssistant } from 'custom-card-helpers'; import { HomeAssistant } from 'custom-card-helpers';
import { import { CameraConfig, CamerasConfig, CardWideConfig } from '../types.js';
CameraConfig,
CamerasConfig,
CardWideConfig,
} from '../types.js';
import { allPromises, arrayify, setify } from '../utils/basic.js'; import { allPromises, arrayify, setify } from '../utils/basic.js';
import { import {
CameraManagerCameraCapabilities, CameraManagerCameraCapabilities,
@@ -137,11 +133,11 @@ export class CameraManager {
}; };
const engineTypes = await getEngineTypes(camerasConfig); const engineTypes = await getEngineTypes(camerasConfig);
for (const [index, cameraConfig] of camerasConfig.entries()) { for (const [index, cameraConfig] of camerasConfig.entries()) {
const engineType = engineTypes[index]; const engineType = engineTypes[index];
const engine = engineType const engine = engineType
? engines.get(engineType) ?? this._engineFactory.createEngine(engineType) ? engines.get(engineType) ?? this._engineFactory.createEngine(engineType)
: null; : null;
if (!engine || !engineType) { if (!engine || !engineType) {
throw new CameraInitializationError( throw new CameraInitializationError(
localize('error.no_camera_engine'), localize('error.no_camera_engine'),
@@ -180,6 +176,8 @@ export class CameraManager {
entityRegistryManager: EntityRegistryManager, entityRegistryManager: EntityRegistryManager,
camerasConfig: CamerasConfig, camerasConfig: CamerasConfig,
): Promise<void> { ): Promise<void> {
const initializationStartTime = new Date();
const hasAutoTriggers = (config: CameraConfig): boolean => { const hasAutoTriggers = (config: CameraConfig): boolean => {
return config.triggers.motion || config.triggers.occupancy; return config.triggers.motion || config.triggers.occupancy;
}; };
@@ -229,6 +227,16 @@ export class CameraManager {
if (!this._store.getVisibleCameraCount()) { if (!this._store.getVisibleCameraCount()) {
throw new CameraInitializationError(localize('error.no_visible_cameras')); throw new CameraInitializationError(localize('error.no_visible_cameras'));
} }
log(
this._cardWideConfig,
'Frigate Card CameraManager initialized (Cameras: ',
camerasConfig,
`, Duration: ${
(new Date().getTime() - initializationStartTime.getTime()) / 1000
}s,`,
')',
);
} }
public isInitialized(): boolean { public isInitialized(): boolean {
+4 -6
View File
@@ -1063,16 +1063,14 @@ class FrigateCard extends LitElement {
this._cardWideConfig, this._cardWideConfig,
); );
// For each camera merge the config into the camera global config. The // For each camera merge the config (which has no defaults) into the camera
// merging must happen in this order, to ensure that the defaults in the // global config (which does have defaults). The merging must happen in this
// cameras global config do not override the values specified in the // order, to ensure that the defaults in the cameras global config do not
// per-camera config. // override the values specified in the per-camera config.
const cameras = config.cameras.map((camera) => const cameras = config.cameras.map((camera) =>
merge(cloneDeep(config.cameras_global), camera), merge(cloneDeep(config.cameras_global), camera),
); );
console.info("MERGED CAMERAS", cameras);
try { try {
await this._cameraManager.initializeCameras( await this._cameraManager.initializeCameras(
hass, hass,
+8 -3
View File
@@ -1282,9 +1282,14 @@ export interface CardWideConfig {
* Main card config. * Main card config.
*/ */
export const frigateCardConfigSchema = z.object({ export const frigateCardConfigSchema = z.object({
// Main configuration sections. // Defaults are stripped out of the individual cameras, since each camera will
cameras: camerasConfigSchema, // be merged with `cameras_global` which *does* have defaults. If we didn't do
cameras_global: cameraConfigSchema.optional(), // this, the default values of each individual camera would override the
// intentionally specified values in `cameras_global` during camera
// initialization when the two configs are merged.
cameras: deepRemoveDefaults(camerasConfigSchema),
cameras_global: cameraConfigSchema,
view: viewConfigSchema, view: viewConfigSchema,
menu: menuConfigSchema, menu: menuConfigSchema,
live: liveConfigSchema, live: liveConfigSchema,