From 35cc2911185889d32bc760517df1caf4bd76b79c Mon Sep 17 00:00:00 2001 From: Shay Levy Date: Fri, 11 Feb 2022 18:42:22 +0200 Subject: [PATCH] Add support for media player assumed state (#11642) --- src/data/media-player.ts | 40 +++++++++--- .../hui-media-player-entity-row.ts | 63 ++++++++++++++++--- 2 files changed, 87 insertions(+), 16 deletions(-) diff --git a/src/data/media-player.ts b/src/data/media-player.ts index 48f3351dbb..6328b4aafe 100644 --- a/src/data/media-player.ts +++ b/src/data/media-player.ts @@ -261,8 +261,10 @@ export const computeMediaControls = ( }); } + const assumedState = stateObj.attributes.assumed_state === true; + if ( - (state === "playing" || state === "paused") && + (state === "playing" || state === "paused" || assumedState) && supportsFeature(stateObj, SUPPORT_PREVIOUS_TRACK) ) { buttons.push({ @@ -272,14 +274,15 @@ export const computeMediaControls = ( } if ( - (state === "playing" && + !assumedState && + ((state === "playing" && (supportsFeature(stateObj, SUPPORT_PAUSE) || supportsFeature(stateObj, SUPPORT_STOP))) || - ((state === "paused" || state === "idle") && - supportsFeature(stateObj, SUPPORT_PLAY)) || - (state === "on" && - (supportsFeature(stateObj, SUPPORT_PLAY) || - supportsFeature(stateObj, SUPPORT_PAUSE))) + ((state === "paused" || state === "idle") && + supportsFeature(stateObj, SUPPORT_PLAY)) || + (state === "on" && + (supportsFeature(stateObj, SUPPORT_PLAY) || + supportsFeature(stateObj, SUPPORT_PAUSE)))) ) { buttons.push({ icon: @@ -299,8 +302,29 @@ export const computeMediaControls = ( }); } + if (assumedState && supportsFeature(stateObj, SUPPORT_PLAY)) { + buttons.push({ + icon: mdiPlay, + action: "media_play", + }); + } + + if (assumedState && supportsFeature(stateObj, SUPPORT_PAUSE)) { + buttons.push({ + icon: mdiPause, + action: "media_pause", + }); + } + + if (assumedState && supportsFeature(stateObj, SUPPORT_STOP)) { + buttons.push({ + icon: mdiStop, + action: "media_stop", + }); + } + if ( - (state === "playing" || state === "paused") && + (state === "playing" || state === "paused" || assumedState) && supportsFeature(stateObj, SUPPORT_NEXT_TRACK) ) { buttons.push({ diff --git a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts index 5935905dbf..f9e40bea12 100644 --- a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts @@ -110,10 +110,11 @@ class HuiMediaPlayerEntityRow extends LitElement implements LovelaceRow { const entityState = stateObj.state; const controlButton = this._computeControlButton(stateObj); + const assumedState = stateObj.attributes.assumed_state === true; const buttons = html` ${!this._narrow && - entityState === "playing" && + (entityState === "playing" || assumedState) && supportsFeature(stateObj, SUPPORT_PREVIOUS_TRACK) ? html` ` : ""} - ${(entityState === "playing" && + ${!assumedState && + ((entityState === "playing" && (supportsFeature(stateObj, SUPPORT_PAUSE) || supportsFeature(stateObj, SUPPORT_STOP))) || - ((entityState === "paused" || entityState === "idle") && - supportsFeature(stateObj, SUPPORT_PLAY)) || - (entityState === "on" && - (supportsFeature(stateObj, SUPPORT_PLAY) || - supportsFeature(stateObj, SUPPORT_PAUSE))) + ((entityState === "paused" || entityState === "idle") && + supportsFeature(stateObj, SUPPORT_PLAY)) || + (entityState === "on" && + (supportsFeature(stateObj, SUPPORT_PLAY) || + supportsFeature(stateObj, SUPPORT_PAUSE)))) ? html` ` : ""} - ${entityState === "playing" && + ${assumedState && supportsFeature(stateObj, SUPPORT_PLAY) + ? html` + + ` + : ""} + ${assumedState && supportsFeature(stateObj, SUPPORT_PAUSE) + ? html` + + ` + : ""} + ${assumedState && supportsFeature(stateObj, SUPPORT_STOP) + ? html` + + ` + : ""} + ${(entityState === "playing" || assumedState) && supportsFeature(stateObj, SUPPORT_NEXT_TRACK) ? html`