Fix browseMediaQueryParameters for clip and snapshot.

This commit is contained in:
Dermot Duffy
2021-10-26 13:20:34 -07:00
parent 8d7e5e9b2e
commit a2d58d59b9
4 changed files with 54 additions and 9 deletions
+22 -7
View File
@@ -489,13 +489,19 @@ export class FrigateCard extends LitElement {
`;
}
protected _getBrowseMediaQueryParameters(): BrowseMediaQueryParameters | null {
if (!this._frigateCameraName) {
return null;
/**
* Get the parameters to search for media related to the current view.
* @returns A BrowseMediaQueryParameters object.
*/
protected _getBrowseMediaQueryParameters(): BrowseMediaQueryParameters | undefined {
if (
!this._frigateCameraName ||
!(this._view.isClipRelatedView() || this._view.isSnapshotRelatedView())
) {
return undefined;
}
return {
mediaType: this._view.view == 'clips' ? 'clips' : 'snapshots',
mediaType: this._view.isClipRelatedView() ? 'clips' : 'snapshots',
clientId: this.config.frigate_client_id,
cameraName: this._frigateCameraName,
label: this.config.label,
@@ -503,10 +509,16 @@ export class FrigateCard extends LitElement {
};
}
/**
* Handler for media play event.
*/
protected _playHandler(): void {
this._mediaPlaying = true;
}
/**
* Handler for media pause event.
*/
protected _pauseHandler(): void {
this._mediaPlaying = false;
}
@@ -669,8 +681,10 @@ export class FrigateCard extends LitElement {
}
protected _render(): TemplateResult | void {
const mediaQueryParameters = this._getBrowseMediaQueryParameters();
if (!this._hass || !this._frigateCameraName || !mediaQueryParameters) {
if (!this._hass) {
return html``;
}
if (!this._frigateCameraName) {
this._setMessageAndUpdate(
{
message: localize('error.no_frigate_camera_name'),
@@ -679,6 +693,7 @@ export class FrigateCard extends LitElement {
true,
);
}
const mediaQueryParameters = this._getBrowseMediaQueryParameters();
const pictureElementsClasses = {
'picture-elements': true,
+5 -1
View File
@@ -36,7 +36,7 @@ export class FrigateCardGallery extends LitElement {
protected view!: View;
@property({ attribute: false })
protected browseMediaQueryParameters!: BrowseMediaQueryParameters;
protected browseMediaQueryParameters?: BrowseMediaQueryParameters;
protected _resizeObserver: ResizeObserver;
@@ -72,6 +72,10 @@ export class FrigateCardGallery extends LitElement {
}
protected async _render(): Promise<TemplateResult | void> {
if (!this.browseMediaQueryParameters) {
return html``;
}
let parent: BrowseMediaSource | null;
try {
if (this.view.target) {
-1
View File
@@ -478,7 +478,6 @@ export class FrigateCardViewerCore extends LitElement {
if (img) {
img.src = img.getAttribute('data-src') || img.src;
} else if (hls_player) {
console.info(hls_player);
hls_player.url = hls_player.getAttribute('data-url') || hls_player.url;
} else if (video_source) {
video_source.src = video_source.getAttribute('data-src') || video_source.src;
+27
View File
@@ -24,14 +24,37 @@ export class View {
return this.view == name;
}
/**
* Determine if a view is a gallery.
*/
public isGalleryView(): boolean {
return this.view == 'clips' || this.view == 'snapshots';
}
/**
* Determine if a view is of a piece of media (i.e. not the gallery).
*/
public isMediaView(): boolean {
return !this.isGalleryView();
}
/**
* Determine if a view is related to a clip or clips.
*/
public isClipRelatedView(): boolean {
return ['clip', 'clips'].includes(this.view);
}
/**
* Determine if a view is related to a snapshot or snapshots.
*/
public isSnapshotRelatedView(): boolean {
return ['snapshot', 'snapshots'].includes(this.view);
}
/**
* Get the media item that should be played.
**/
get media(): BrowseMediaSource | undefined {
if (this.target) {
if (this.target.children && this.childIndex !== undefined) {
@@ -42,6 +65,10 @@ export class View {
return undefined;
}
/**
* Dispatch an event to request a view change.
* @param node The element dispatching the event.
*/
public dispatchChangeEvent(node: HTMLElement): void {
node.dispatchEvent(
new CustomEvent<View>('frigate-card:change-view', {