Merge pull request #574 from dermotduffy/images-on-chromecast
Fix snapshots on Chromecast
This commit is contained in:
@@ -8,7 +8,6 @@ import {
|
|||||||
} from 'lit';
|
} from 'lit';
|
||||||
import { BrowseMediaUtil } from '../browse-media-util.js';
|
import { BrowseMediaUtil } from '../browse-media-util.js';
|
||||||
import { EmblaOptionsType, EmblaPluginType } from 'embla-carousel';
|
import { EmblaOptionsType, EmblaPluginType } from 'embla-carousel';
|
||||||
import { HomeAssistant } from 'custom-card-helpers';
|
|
||||||
import { Task } from '@lit-labs/task';
|
import { Task } from '@lit-labs/task';
|
||||||
import { customElement, property } from 'lit/decorators.js';
|
import { customElement, property } from 'lit/decorators.js';
|
||||||
import { ifDefined } from 'lit/directives/if-defined.js';
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
||||||
@@ -18,8 +17,9 @@ import { AutoMediaPlugin } from './embla-plugins/automedia.js';
|
|||||||
import type {
|
import type {
|
||||||
BrowseMediaNeighbors,
|
BrowseMediaNeighbors,
|
||||||
BrowseMediaQueryParameters,
|
BrowseMediaQueryParameters,
|
||||||
FrigateBrowseMediaSource,
|
|
||||||
CameraConfig,
|
CameraConfig,
|
||||||
|
ExtendedHomeAssistant,
|
||||||
|
FrigateBrowseMediaSource,
|
||||||
MediaShowInfo,
|
MediaShowInfo,
|
||||||
TransitionEffect,
|
TransitionEffect,
|
||||||
ViewerConfig,
|
ViewerConfig,
|
||||||
@@ -45,7 +45,7 @@ import viewerStyle from '../scss/viewer.scss';
|
|||||||
@customElement('frigate-card-viewer')
|
@customElement('frigate-card-viewer')
|
||||||
export class FrigateCardViewer extends LitElement {
|
export class FrigateCardViewer extends LitElement {
|
||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
protected hass?: HomeAssistant;
|
protected hass?: ExtendedHomeAssistant;
|
||||||
|
|
||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
protected view?: Readonly<View>;
|
protected view?: Readonly<View>;
|
||||||
@@ -125,7 +125,7 @@ export class FrigateCardViewer extends LitElement {
|
|||||||
@customElement('frigate-card-viewer-carousel')
|
@customElement('frigate-card-viewer-carousel')
|
||||||
export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
protected hass?: HomeAssistant;
|
protected hass?: ExtendedHomeAssistant;
|
||||||
|
|
||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
protected view?: Readonly<View>;
|
protected view?: Readonly<View>;
|
||||||
@@ -463,6 +463,18 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure media URLs use the correct HA URL (relevant for Chromecast where the
|
||||||
|
* default location will be the Chromecast receiver, not HA).
|
||||||
|
* @param url The media URL
|
||||||
|
*/
|
||||||
|
protected _canonicalizeHAURL(url?: string): string | undefined {
|
||||||
|
if (this.hass && url && url.startsWith('/')) {
|
||||||
|
return this.hass.hassUrl(url);
|
||||||
|
}
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lazy load a slide.
|
* Lazy load a slide.
|
||||||
* @param index The index of the slide to lazy load.
|
* @param index The index of the slide to lazy load.
|
||||||
@@ -501,9 +513,9 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
) as HTMLElement & { url: string };
|
) as HTMLElement & { url: string };
|
||||||
|
|
||||||
if (img) {
|
if (img) {
|
||||||
img.src = resolvedMedia.url;
|
img.src = this._canonicalizeHAURL(resolvedMedia.url) || '';
|
||||||
} else if (hls_player) {
|
} else if (hls_player) {
|
||||||
hls_player.url = resolvedMedia.url;
|
hls_player.url = this._canonicalizeHAURL(resolvedMedia.url) || '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -652,6 +664,7 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
): TemplateResult | void {
|
): TemplateResult | void {
|
||||||
// Skip folders as they cannot be rendered by this viewer.
|
// Skip folders as they cannot be rendered by this viewer.
|
||||||
if (
|
if (
|
||||||
|
!this.hass ||
|
||||||
!this.view ||
|
!this.view ||
|
||||||
!this.viewerConfig ||
|
!this.viewerConfig ||
|
||||||
!BrowseMediaUtil.isTrueMedia(mediaToRender) ||
|
!BrowseMediaUtil.isTrueMedia(mediaToRender) ||
|
||||||
@@ -677,7 +690,9 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
muted
|
muted
|
||||||
playsinline
|
playsinline
|
||||||
title="${mediaToRender.title}"
|
title="${mediaToRender.title}"
|
||||||
url=${ifDefined(lazyLoad ? undefined : resolvedMedia?.url)}
|
url=${ifDefined(
|
||||||
|
lazyLoad ? undefined : this._canonicalizeHAURL(resolvedMedia?.url),
|
||||||
|
)}
|
||||||
.hass=${this.hass}
|
.hass=${this.hass}
|
||||||
@frigate-card:media-show=${(e: CustomEvent<MediaShowInfo>) =>
|
@frigate-card:media-show=${(e: CustomEvent<MediaShowInfo>) =>
|
||||||
this._mediaShowEventHandler(slideIndex, e)}
|
this._mediaShowEventHandler(slideIndex, e)}
|
||||||
@@ -685,7 +700,9 @@ export class FrigateCardViewerCarousel extends FrigateCardMediaCarousel {
|
|||||||
</frigate-card-ha-hls-player>`
|
</frigate-card-ha-hls-player>`
|
||||||
: html`<img
|
: html`<img
|
||||||
aria-label="${mediaToRender.title}"
|
aria-label="${mediaToRender.title}"
|
||||||
src=${ifDefined(lazyLoad ? IMG_EMPTY : resolvedMedia?.url)}
|
src=${ifDefined(
|
||||||
|
lazyLoad ? IMG_EMPTY : this._canonicalizeHAURL(resolvedMedia?.url),
|
||||||
|
)}
|
||||||
title="${mediaToRender.title}"
|
title="${mediaToRender.title}"
|
||||||
@click=${() => {
|
@click=${() => {
|
||||||
if (this._carousel?.clickAllowed()) {
|
if (this._carousel?.clickAllowed()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user