Don't show the timeline if no cameras support it.

This commit is contained in:
Dermot Duffy
2023-02-10 19:32:34 -08:00
parent 163679c650
commit 9cd60172a6
12 changed files with 148 additions and 129 deletions
+5 -2
View File
@@ -14,7 +14,7 @@ import {
RecordingQueryResultsMap,
RecordingSegmentsQuery,
RecordingSegmentsQueryResultsMap,
CameraManagerEngineCapabilities,
CameraManagerCameraCapabilities,
CameraManagerMediaCapabilities,
CameraManagerCameraMetadata,
} from './types';
@@ -100,6 +100,9 @@ export interface CameraManagerEngine {
cameraConfig: CameraConfig,
): CameraManagerCameraMetadata;
getCapabilities(): CameraManagerEngineCapabilities | null;
getCameraCapabilities(
cameraConfig: CameraConfig,
): CameraManagerCameraCapabilities | null;
getMediaCapabilities(media: ViewMedia): CameraManagerMediaCapabilities | null;
}
+8 -4
View File
@@ -13,7 +13,7 @@ import {
import { DateRange } from '../range';
import {
CameraManagerCameraMetadata,
CameraManagerEngineCapabilities,
CameraManagerCameraCapabilities,
CameraManagerMediaCapabilities,
DataQuery,
Engine,
@@ -805,10 +805,14 @@ export class FrigateCameraManagerEngine implements CameraManagerEngine {
return seekMilliseconds / 1000;
}
public getCapabilities(): CameraManagerEngineCapabilities {
public getCameraCapabilities(
cameraConfig: CameraConfig,
): CameraManagerCameraCapabilities {
const isBirdseye = cameraConfig.frigate.camera_name === CAMERA_BIRDSEYE;
return {
canFavoriteEvents: true,
canFavoriteRecordings: false,
canFavoriteEvents: !isBirdseye,
canFavoriteRecordings: !isBirdseye,
supportsTimeline: !isBirdseye,
};
}
+35 -17
View File
@@ -2,6 +2,7 @@ import { HomeAssistant } from 'custom-card-helpers';
import { CameraConfig, CardWideConfig } from '../types.js';
import { allPromises, arrayify, setify } from '../utils/basic.js';
import {
CameraManagerCameraCapabilities,
CameraManagerCameraMetadata,
CameraManagerCapabilities,
CameraManagerMediaCapabilities,
@@ -312,22 +313,6 @@ export class CameraManager {
return engine.getMediaDownloadPath(cameraConfig, media);
}
public getCapabilities(): CameraManagerCapabilities | null {
const engines = this._engineFactory.getAllEngines(this._cameras);
if (!engines) {
return null;
}
return {
canFavoriteEvents: engines.some(
(engine) => engine.getCapabilities()?.canFavoriteEvents,
),
canFavoriteRecordings: engines.some(
(engine) => engine.getCapabilities()?.canFavoriteRecordings,
),
};
}
public getMediaCapabilities(media: ViewMedia): CameraManagerMediaCapabilities | null {
const engine = this._engineFactory.getEngineForMedia(this._cameras, media);
if (!engine) {
@@ -534,12 +519,45 @@ export class CameraManager {
public getCameraMetadata(
hass: HomeAssistant,
cameraConfig?: CameraConfig,
cameraID: string,
): CameraManagerCameraMetadata | null {
const cameraConfig = this._cameras.get(cameraID);
const engine = this._engineFactory.getEngineForCamera(cameraConfig);
if (!engine || !cameraConfig) {
return null;
}
return engine.getCameraMetadata(hass, cameraConfig);
}
public getCameraCapabilities(
cameraID: string,
): CameraManagerCameraCapabilities | null {
const cameraConfig = this._cameras.get(cameraID);
if (!cameraConfig) {
return null;
}
const engine = this._engineFactory.getEngineForCamera(cameraConfig);
if (!engine) {
return null;
}
return engine.getCameraCapabilities(cameraConfig);
}
public getAggregateCameraCapabilities(
cameraIDs?: Set<string>,
): CameraManagerCapabilities {
const perCameraCapabilities = [...(cameraIDs ?? this._cameras.keys())].map(
(cameraID) => this.getCameraCapabilities(cameraID),
);
return {
canFavoriteEvents: perCameraCapabilities.some((cap) => cap?.canFavoriteEvents),
canFavoriteRecordings: perCameraCapabilities.some(
(cap) => cap?.canFavoriteRecordings,
),
supportsTimeline: perCameraCapabilities.some((cap) => cap?.supportsTimeline),
};
}
}
+2 -1
View File
@@ -85,10 +85,11 @@ export interface MediaMetadata {
interface BaseCapabilities {
canFavoriteEvents: boolean;
canFavoriteRecordings: boolean;
supportsTimeline: boolean;
}
export type CameraManagerCapabilities = BaseCapabilities;
export type CameraManagerEngineCapabilities = BaseCapabilities;
export type CameraManagerCameraCapabilities = BaseCapabilities;
export interface CameraManagerMediaCapabilities {
canFavorite: boolean;
}