mirror of
https://github.com/home-assistant/frontend.git
synced 2025-08-01 13:37:47 +00:00
Update Media Card to check for supported features
This commit is contained in:
parent
1437b4c4b6
commit
d33e035db7
@ -3,8 +3,17 @@ import { HomeAssistant } from "../types";
|
||||
import { timeCachePromiseFunc } from "../common/util/time-cache-function-promise";
|
||||
|
||||
export const SUPPORT_PAUSE = 1;
|
||||
export const SUPPORT_VOLUME_SET = 4;
|
||||
export const SUPPORT_VOLUME_MUTE = 8;
|
||||
export const SUPPORT_PREVIOUS_TRACK = 16;
|
||||
export const SUPPORT_NEXT_TRACK = 32;
|
||||
export const SUPPORT_TURN_ON = 128;
|
||||
export const SUPPORT_TURN_OFF = 256;
|
||||
export const SUPPORT_PLAY_MEDIA = 512;
|
||||
export const SUPPORT_VOLUME_BUTTONS = 1024;
|
||||
export const SUPPORT_SELECT_SOURCE = 2048;
|
||||
export const SUPPORTS_PLAY = 16384;
|
||||
export const SUPPORT_SELECT_SOUND_MODE = 65536;
|
||||
export const OFF_STATES = ["off", "idle"];
|
||||
|
||||
export interface MediaPlayerThumbnail {
|
||||
|
@ -16,7 +16,15 @@ import "../../../components/ha-card";
|
||||
import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element";
|
||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||
import { supportsFeature } from "../../../common/entity/supports-feature";
|
||||
import { OFF_STATES, SUPPORT_PAUSE } from "../../../data/media-player";
|
||||
import {
|
||||
OFF_STATES,
|
||||
SUPPORT_PAUSE,
|
||||
SUPPORT_TURN_ON,
|
||||
SUPPORT_TURN_OFF,
|
||||
SUPPORT_PREVIOUS_TRACK,
|
||||
SUPPORT_NEXT_TRACK,
|
||||
SUPPORTS_PLAY,
|
||||
} from "../../../data/media-player";
|
||||
import { hasConfigOrEntityChanged } from "../common/has-changed";
|
||||
import { HomeAssistant, MediaEntity } from "../../../types";
|
||||
import { LovelaceCard, LovelaceCardEditor } from "../types";
|
||||
@ -89,7 +97,9 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
${OFF_STATES.includes(stateObj.state)
|
||||
${OFF_STATES.includes(stateObj.state) ||
|
||||
!stateObj.attributes.media_duration ||
|
||||
!stateObj.attributes.media_position
|
||||
? ""
|
||||
: html`
|
||||
<paper-progress
|
||||
@ -99,32 +109,52 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
|
||||
></paper-progress>
|
||||
`}
|
||||
<div class="controls">
|
||||
<paper-icon-button
|
||||
icon="hass:power"
|
||||
.action=${stateObj.state === "off" ? "turn_on" : "turn_off"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
${(stateObj.state === "off" &&
|
||||
!supportsFeature(stateObj, SUPPORT_TURN_ON)) ||
|
||||
(stateObj.state === "on" &&
|
||||
!supportsFeature(stateObj, SUPPORT_TURN_OFF))
|
||||
? ""
|
||||
: html`
|
||||
<paper-icon-button
|
||||
icon="hass:power"
|
||||
.action=${stateObj.state === "off" ? "turn_on" : "turn_off"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
`}
|
||||
<div class="playback-controls">
|
||||
<paper-icon-button
|
||||
icon="hass:skip-previous"
|
||||
.action=${"media_previous_track"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
<paper-icon-button
|
||||
class="playPauseButton"
|
||||
icon=${stateObj.state !== "playing"
|
||||
? "hass:play"
|
||||
: supportsFeature(stateObj, SUPPORT_PAUSE)
|
||||
? "hass:pause"
|
||||
: "hass:stop"}
|
||||
.action=${"media_play_pause"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
<paper-icon-button
|
||||
icon="hass:skip-next"
|
||||
.action=${"media_next_track"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
${!supportsFeature(stateObj, SUPPORT_PREVIOUS_TRACK)
|
||||
? ""
|
||||
: html`
|
||||
<paper-icon-button
|
||||
icon="hass:skip-previous"
|
||||
.action=${"media_previous_track"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
`}
|
||||
${stateObj.state !== "playing" &&
|
||||
!supportsFeature(stateObj, SUPPORTS_PLAY)
|
||||
? ""
|
||||
: html`
|
||||
<paper-icon-button
|
||||
class="playPauseButton"
|
||||
icon=${stateObj.state !== "playing"
|
||||
? "hass:play"
|
||||
: supportsFeature(stateObj, SUPPORT_PAUSE)
|
||||
? "hass:pause"
|
||||
: "hass:stop"}
|
||||
.action=${"media_play_pause"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
`}
|
||||
${!supportsFeature(stateObj, SUPPORT_NEXT_TRACK)
|
||||
? ""
|
||||
: html`
|
||||
<paper-icon-button
|
||||
icon="hass:skip-next"
|
||||
.action=${"media_next_track"}
|
||||
@click=${this._handleClick}
|
||||
></paper-icon-button>
|
||||
`}
|
||||
</div>
|
||||
<paper-icon-button
|
||||
icon="hass:dots-vertical"
|
||||
|
Loading…
x
Reference in New Issue
Block a user