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 {
CameraConfig,
CamerasConfig,
CardWideConfig,
} from '../types.js';
import { CameraConfig, CamerasConfig, CardWideConfig } from '../types.js';
import { allPromises, arrayify, setify } from '../utils/basic.js';
import {
CameraManagerCameraCapabilities,
@@ -137,11 +133,11 @@ export class CameraManager {
};
const engineTypes = await getEngineTypes(camerasConfig);
for (const [index, cameraConfig] of camerasConfig.entries()) {
for (const [index, cameraConfig] of camerasConfig.entries()) {
const engineType = engineTypes[index];
const engine = engineType
? engines.get(engineType) ?? this._engineFactory.createEngine(engineType)
: null;
? engines.get(engineType) ?? this._engineFactory.createEngine(engineType)
: null;
if (!engine || !engineType) {
throw new CameraInitializationError(
localize('error.no_camera_engine'),
@@ -180,6 +176,8 @@ export class CameraManager {
entityRegistryManager: EntityRegistryManager,
camerasConfig: CamerasConfig,
): Promise<void> {
const initializationStartTime = new Date();
const hasAutoTriggers = (config: CameraConfig): boolean => {
return config.triggers.motion || config.triggers.occupancy;
};
@@ -229,6 +227,16 @@ export class CameraManager {
if (!this._store.getVisibleCameraCount()) {
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 {
+4 -6
View File
@@ -1063,16 +1063,14 @@ class FrigateCard extends LitElement {
this._cardWideConfig,
);
// For each camera merge the config into the camera global config. The
// merging must happen in this order, to ensure that the defaults in the
// cameras global config do not override the values specified in the
// per-camera config.
// For each camera merge the config (which has no defaults) into the camera
// global config (which does have defaults). The merging must happen in this
// order, to ensure that the defaults in the cameras global config do not
// override the values specified in the per-camera config.
const cameras = config.cameras.map((camera) =>
merge(cloneDeep(config.cameras_global), camera),
);
console.info("MERGED CAMERAS", cameras);
try {
await this._cameraManager.initializeCameras(
hass,
+8 -3
View File
@@ -1282,9 +1282,14 @@ export interface CardWideConfig {
* Main card config.
*/
export const frigateCardConfigSchema = z.object({
// Main configuration sections.
cameras: camerasConfigSchema,
cameras_global: cameraConfigSchema.optional(),
// Defaults are stripped out of the individual cameras, since each camera will
// be merged with `cameras_global` which *does* have defaults. If we didn't do
// 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,
menu: menuConfigSchema,
live: liveConfigSchema,