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) { * Get the parameters to search for media related to the current view.
return null; * @returns A BrowseMediaQueryParameters object.
*/
protected _getBrowseMediaQueryParameters(): BrowseMediaQueryParameters | undefined {
if (
!this._frigateCameraName ||
!(this._view.isClipRelatedView() || this._view.isSnapshotRelatedView())
) {
return undefined;
} }
return { return {
mediaType: this._view.view == 'clips' ? 'clips' : 'snapshots', mediaType: this._view.isClipRelatedView() ? 'clips' : 'snapshots',
clientId: this.config.frigate_client_id, clientId: this.config.frigate_client_id,
cameraName: this._frigateCameraName, cameraName: this._frigateCameraName,
label: this.config.label, label: this.config.label,
@@ -503,10 +509,16 @@ export class FrigateCard extends LitElement {
}; };
} }
/**
* Handler for media play event.
*/
protected _playHandler(): void { protected _playHandler(): void {
this._mediaPlaying = true; this._mediaPlaying = true;
} }
/**
* Handler for media pause event.
*/
protected _pauseHandler(): void { protected _pauseHandler(): void {
this._mediaPlaying = false; this._mediaPlaying = false;
} }
@@ -669,8 +681,10 @@ export class FrigateCard extends LitElement {
} }
protected _render(): TemplateResult | void { protected _render(): TemplateResult | void {
const mediaQueryParameters = this._getBrowseMediaQueryParameters(); if (!this._hass) {
if (!this._hass || !this._frigateCameraName || !mediaQueryParameters) { return html``;
}
if (!this._frigateCameraName) {
this._setMessageAndUpdate( this._setMessageAndUpdate(
{ {
message: localize('error.no_frigate_camera_name'), message: localize('error.no_frigate_camera_name'),
@@ -679,6 +693,7 @@ export class FrigateCard extends LitElement {
true, true,
); );
} }
const mediaQueryParameters = this._getBrowseMediaQueryParameters();
const pictureElementsClasses = { const pictureElementsClasses = {
'picture-elements': true, 'picture-elements': true,
+5 -1
View File
@@ -36,7 +36,7 @@ export class FrigateCardGallery extends LitElement {
protected view!: View; protected view!: View;
@property({ attribute: false }) @property({ attribute: false })
protected browseMediaQueryParameters!: BrowseMediaQueryParameters; protected browseMediaQueryParameters?: BrowseMediaQueryParameters;
protected _resizeObserver: ResizeObserver; protected _resizeObserver: ResizeObserver;
@@ -72,6 +72,10 @@ export class FrigateCardGallery extends LitElement {
} }
protected async _render(): Promise<TemplateResult | void> { protected async _render(): Promise<TemplateResult | void> {
if (!this.browseMediaQueryParameters) {
return html``;
}
let parent: BrowseMediaSource | null; let parent: BrowseMediaSource | null;
try { try {
if (this.view.target) { if (this.view.target) {
-1
View File
@@ -478,7 +478,6 @@ export class FrigateCardViewerCore extends LitElement {
if (img) { if (img) {
img.src = img.getAttribute('data-src') || img.src; img.src = img.getAttribute('data-src') || img.src;
} else if (hls_player) { } else if (hls_player) {
console.info(hls_player);
hls_player.url = hls_player.getAttribute('data-url') || hls_player.url; hls_player.url = hls_player.getAttribute('data-url') || hls_player.url;
} else if (video_source) { } else if (video_source) {
video_source.src = video_source.getAttribute('data-src') || video_source.src; 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; return this.view == name;
} }
/**
* Determine if a view is a gallery.
*/
public isGalleryView(): boolean { public isGalleryView(): boolean {
return this.view == 'clips' || this.view == 'snapshots'; 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 { public isMediaView(): boolean {
return !this.isGalleryView(); 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 { get media(): BrowseMediaSource | undefined {
if (this.target) { if (this.target) {
if (this.target.children && this.childIndex !== undefined) { if (this.target.children && this.childIndex !== undefined) {
@@ -42,6 +65,10 @@ export class View {
return undefined; return undefined;
} }
/**
* Dispatch an event to request a view change.
* @param node The element dispatching the event.
*/
public dispatchChangeEvent(node: HTMLElement): void { public dispatchChangeEvent(node: HTMLElement): void {
node.dispatchEvent( node.dispatchEvent(
new CustomEvent<View>('frigate-card:change-view', { new CustomEvent<View>('frigate-card:change-view', {