From a01ba3458bd817ec873d6d5deab820677260e4eb Mon Sep 17 00:00:00 2001 From: shaonianzhetnan <5294022+shaonianzhentan@users.noreply.github.com> Date: Thu, 2 Feb 2023 23:44:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E4=B8=AA=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E6=92=AD=E6=94=BE=E5=99=A8=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++- custom_components/ha_cloud_music/__init__.py | 2 +- .../ha_cloud_music/manifest.json | 2 +- .../ha_cloud_music/media_player.py | 28 +++++++++++++------ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 49a5c78..db65739 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,10 @@ homeassistant: customize.yaml ```yaml media_player.yun_yin_le: - media_player: media_player.源实体 + media_player: + - media_player.源实体1 + - media_player.源实体2 + - media_player.源实体3 ``` ## 关联项目 diff --git a/custom_components/ha_cloud_music/__init__.py b/custom_components/ha_cloud_music/__init__.py index 6e056a2..ab572c2 100644 --- a/custom_components/ha_cloud_music/__init__.py +++ b/custom_components/ha_cloud_music/__init__.py @@ -19,7 +19,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: hass.data['cloud_music'] = CloudMusic(hass, api_url) hass.http.register_view(HttpView) - hass.config_entries.async_setup_platforms(entry, PLATFORMS) + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) entry.async_on_unload(entry.add_update_listener(update_listener)) return True diff --git a/custom_components/ha_cloud_music/manifest.json b/custom_components/ha_cloud_music/manifest.json index 01d84f8..14a01de 100644 --- a/custom_components/ha_cloud_music/manifest.json +++ b/custom_components/ha_cloud_music/manifest.json @@ -1,7 +1,7 @@ { "domain": "ha_cloud_music", "name": "\u4E91\u97F3\u4E50", - "version": "2023.2.2", + "version": "2023.2.3", "config_flow": true, "documentation": "https://github.com/shaonianzhentan/ha_cloud_music", "requirements": [], diff --git a/custom_components/ha_cloud_music/media_player.py b/custom_components/ha_cloud_music/media_player.py index 79d2a07..a87290c 100644 --- a/custom_components/ha_cloud_music/media_player.py +++ b/custom_components/ha_cloud_music/media_player.py @@ -82,6 +82,7 @@ class CloudMusicMediaPlayer(MediaPlayerEntity): # default attribute self._attr_source_list = [] + self._attr_sound_mode = None self._attr_sound_mode_list = [] self._attr_name = manifest.name self._attr_unique_id = manifest.documentation @@ -132,11 +133,8 @@ class CloudMusicMediaPlayer(MediaPlayerEntity): @property def media_player(self): - if self.entity_id is not None: - state = self.hass.states.get(self.entity_id) - entity_id = state.attributes.get('media_player') - if entity_id is not None and entity_id != self.entity_id and entity_id.startswith('media_player.'): - return self.hass.states.get(entity_id) + if self.entity_id is not None and self._attr_sound_mode is not None: + return self.hass.states.get(self._attr_sound_mode) @property def device_info(self): @@ -161,9 +159,10 @@ class CloudMusicMediaPlayer(MediaPlayerEntity): if self._attr_source_list.count(source) > 0: self._attr_source = source - async def async_select_sound_mode(self, mode): - if self._attr_sound_mode_list.count(mode) > 0: - self._attr_sound_mode = mode + async def async_select_sound_mode(self, sound_mode): + if self._attr_sound_mode_list.count(sound_mode) > 0: + await self.async_media_pause() + self._attr_sound_mode = sound_mode async def async_volume_up(self): await self.async_call('volume_up') @@ -234,7 +233,18 @@ class CloudMusicMediaPlayer(MediaPlayerEntity): # 更新属性 async def async_update(self): - pass + if self.entity_id is not None: + state = self.hass.states.get(self.entity_id) + entities = state.attributes.get('media_player') + if entities is not None: + # 兼容初版 + if isinstance(entities, str): + entities = [ entities ] + + if len(entities) > 0: + self._attr_sound_mode_list = entities + if self._attr_sound_mode is None: + self._attr_sound_mode = entities[0] # 调用服务 async def async_call(self, service, service_data={}):