From cf3d86437856800603f40feb10e6215b5c36171d Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Tue, 12 Jun 2018 21:27:54 +0200 Subject: [PATCH] General sound mode support (#1275) * Add sound mode support * Add sound mode support * Rebase Sound Mode support * Cammel case fix * Sound mode support * Add sound mode support * change to attr-for-selected * Simplify sound mode support --- .../controls/more-info-media_player.js | 36 +++++++++++++++++++ src/util/hass-media-player-model.js | 16 +++++++++ 2 files changed, 52 insertions(+) diff --git a/src/dialogs/more-info/controls/more-info-media_player.js b/src/dialogs/more-info/controls/more-info-media_player.js index 0263626886..68aba88d2f 100644 --- a/src/dialogs/more-info/controls/more-info-media_player.js +++ b/src/dialogs/more-info/controls/more-info-media_player.js @@ -97,6 +97,19 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) { + +
@@ -122,6 +135,12 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) { observer: 'handleSourceChanged', }, + SoundModeInput: { + type: String, + value: '', + observer: 'handleSoundModeChanged', + }, + ttsLoaded: { type: Boolean, computed: 'computeTTSLoaded(hass)', @@ -144,6 +163,10 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) { this.sourceIndex = newVal.sourceList.indexOf(newVal.source); } + if (newVal && newVal.soundModeList !== undefined) { + this.SoundModeInput = newVal.soundMode; + } + if (oldVal) { setTimeout(() => { this.fire('iron-resize'); @@ -182,6 +205,10 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) { return playerObj.isOff || !playerObj.supportsSelectSource || !playerObj.sourceList; } + computeHideSelectSoundMode(playerObj) { + return playerObj.isOff || !playerObj.supportsSelectSoundMode || !playerObj.soundModeList; + } + computeHideTTS(ttsLoaded, playerObj) { return !ttsLoaded || !playerObj.supportsPlayMedia; } @@ -227,6 +254,15 @@ class MoreInfoMediaPlayer extends LocalizeMixin(EventsMixin(PolymerElement)) { this.playerObj.selectSource(sourceInput); } + handleSoundModeChanged(newVal, oldVal) { + if (oldVal + && newVal !== this.playerObj.soundMode + && this.playerObj.supportsSelectSoundMode + ) { + this.playerObj.selectSoundMode(newVal); + } + } + handleVolumeTap() { if (!this.playerObj.supportsVolumeMute) { return; diff --git a/src/util/hass-media-player-model.js b/src/util/hass-media-player-model.js index 86e977afe5..f18fc4145b 100644 --- a/src/util/hass-media-player-model.js +++ b/src/util/hass-media-player-model.js @@ -101,6 +101,10 @@ export default class MediaPlayerEntity { return (this._feat & 2048) !== 0; } + get supportsSelectSoundMode() { + return (this._feat & 65536) !== 0; + } + get supportsPlay() { return (this._feat & 16384) !== 0; } @@ -140,6 +144,14 @@ export default class MediaPlayerEntity { return this._attr.source_list; } + get soundMode() { + return this._attr.sound_mode; + } + + get soundModeList() { + return this._attr.sound_mode_list; + } + mediaPlayPause() { this.callService('media_play_pause'); } @@ -195,6 +207,10 @@ export default class MediaPlayerEntity { this.callService('select_source', { source }); } + selectSoundMode(soundMode) { + this.callService('select_sound_mode', { sound_mode: soundMode }); + } + // helper method callService(service, data = {}) {