diff --git a/src/card.ts b/src/card.ts index 3e9d31e0..8b99b9d5 100644 --- a/src/card.ts +++ b/src/card.ts @@ -36,7 +36,7 @@ import type { Message, } from './types.js'; -import { CAMERA_BIRDSEYE, CARD_VERSION, REPO_URL } from './const.js'; +import { CAMERA_BIRDSEYE, CARD_VERSION, MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA, REPO_URL } from './const.js'; import { FrigateCardElements } from './components/elements.js'; import { FrigateCardImage } from './components/image.js'; import { FRIGATE_BUTTON_MENU_ICON, FrigateCardMenu } from './components/menu.js'; @@ -86,6 +86,7 @@ import { getOverriddenConfig, getOverridesByKey, } from './card-condition.js'; +import { supportsFeature } from './icons/update.js'; /** A note on media callbacks: * @@ -470,9 +471,18 @@ export class FrigateCard extends LitElement { }); } - const mediaPlayers = Object.keys(this._hass?.states || {}).filter((entity) => - entity.startsWith('media_player.'), - ); + const isValidMediaPlayer = (entity: string): boolean => { + if (entity.startsWith('media_player.')) { + const stateObj = this._hass?.states[entity]; + + if (stateObj && supportsFeature(stateObj, MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA)) { + return true; + } + } + return false; + } + + const mediaPlayers = Object.keys(this._hass?.states || {}).filter(isValidMediaPlayer); if ( mediaPlayers.length && (this._view?.isViewerView() || diff --git a/src/const.ts b/src/const.ts index cc75daa0..e61138ac 100644 --- a/src/const.ts +++ b/src/const.ts @@ -140,3 +140,6 @@ export const CONF_DIMENSIONS_ASPECT_RATIO_MODE = `${CONF_DIMENSIONS}.aspect_ratio_mode` as const; export const CONF_OVERRIDES = 'overrides' as const; + +// Taken from https://github.dev/home-assistant/frontend/blob/b5861869e39290fd2e15737e89571dfc543b3ad3/src/data/media-player.ts#L93 +export const MEDIA_PLAYER_SUPPORT_BROWSE_MEDIA = 131072; \ No newline at end of file