Add support for both snapshots/clips in timeline.

This commit is contained in:
Dermot Duffy
2022-04-04 21:25:12 -07:00
parent f98d749d07
commit 9c372815f2
10 changed files with 212 additions and 157 deletions
+31 -18
View File
@@ -1,6 +1,7 @@
import { HomeAssistant } from 'custom-card-helpers';
import type {
BrowseMediaQueryParametersBase,
BrowseMediaQueryParameters,
FrigateBrowseMediaSource,
CameraConfig,
@@ -39,8 +40,8 @@ export class BrowseMediaUtil {
* @param media The media object.
* @returns `true` if it's truly a media item, `false` otherwise.
*/
static isTrueMedia(media: FrigateBrowseMediaSource): boolean {
return !media.can_expand;
static isTrueMedia(media?: FrigateBrowseMediaSource): boolean {
return !!media && !media.can_expand;
}
/**
@@ -113,15 +114,13 @@ export class BrowseMediaUtil {
* Get the parameters to search for media.
* @returns A BrowseMediaQueryParameters object.
*/
static getBrowseMediaQueryParameters(
mediaType: 'clips' | 'snapshots',
static getBrowseMediaQueryParametersBase(
cameraConfig?: CameraConfig,
): BrowseMediaQueryParameters | null {
): BrowseMediaQueryParametersBase | null {
if (!cameraConfig || !cameraConfig.camera_name) {
return null;
}
return {
mediaType: mediaType,
clientId: cameraConfig.client_id,
cameraName: cameraConfig.camera_name,
label: cameraConfig.label,
@@ -129,20 +128,37 @@ export class BrowseMediaUtil {
};
}
/**
* Set the mediaType parameter from the current view.
* @param browseMediaQueryParametersBase The base media query parameters object.
* @param view The current view.
* @returns A fully populated BrowseMediaQueryParameters or null.
*/
static setMediaTypeFromView(
browseMediaQueryParametersBase: BrowseMediaQueryParametersBase | null,
view: View,
): BrowseMediaQueryParameters | null {
if (
!browseMediaQueryParametersBase ||
!(view.isClipRelatedView() || view.isSnapshotRelatedView())
) {
return null;
}
return {
...browseMediaQueryParametersBase,
mediaType: view.isClipRelatedView() ? 'clips' : 'snapshots',
};
}
/**
* Get the parameters to search for media related to the current view.
* @returns A BrowseMediaQueryParameters object.
*/
static getBrowseMediaQueryParametersOrDispatchError(
static getBrowseMediaQueryParametersBaseOrDispatchError(
node: HTMLElement,
view: View,
cameraConfig: CameraConfig,
): BrowseMediaQueryParameters | null {
if (!view.isClipRelatedView() && !view.isSnapshotRelatedView()) {
return null;
}
// Verify there is a camera name, otherwise getBrowseMediaQueryParameters()
): BrowseMediaQueryParametersBase | null {
// Verify there is a camera name, otherwise getBrowseMediaQueryParametersBase()
// will return undefined.
if (!cameraConfig.camera_name) {
dispatchErrorMessageEvent(
@@ -152,10 +168,7 @@ export class BrowseMediaUtil {
return null;
}
return BrowseMediaUtil.getBrowseMediaQueryParameters(
view.isClipRelatedView() ? 'clips' : 'snapshots',
cameraConfig,
);
return BrowseMediaUtil.getBrowseMediaQueryParametersBase(cameraConfig);
}
/**