Fix defaults overriding intentional values.
This commit is contained in:
@@ -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
@@ -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
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user