From 3bf8c1afaad565e43417b2cacf479057349fe9c5 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 16 Feb 2022 16:16:05 +0100 Subject: [PATCH 1/2] Keep TTS media browser params in identifier --- homeassistant/components/tts/media_source.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/tts/media_source.py b/homeassistant/components/tts/media_source.py index 2398a6203ad976..d00cd4f5a27407 100644 --- a/homeassistant/components/tts/media_source.py +++ b/homeassistant/components/tts/media_source.py @@ -70,8 +70,8 @@ async def async_browse_media( ) -> BrowseMediaSource: """Return media.""" if item.identifier: - provider, _, _ = item.identifier.partition("?") - return self._provider_item(provider) + provider, _, params = item.identifier.partition("?") + return self._provider_item(provider, params) # Root. List providers. manager: SpeechManager = self.hass.data[DOMAIN] @@ -89,7 +89,9 @@ async def async_browse_media( ) @callback - def _provider_item(self, provider_domain: str) -> BrowseMediaSource: + def _provider_item( + self, provider_domain: str, params: str | None = None + ) -> BrowseMediaSource: """Return provider item.""" manager: SpeechManager = self.hass.data[DOMAIN] provider = manager.providers.get(provider_domain) @@ -97,9 +99,14 @@ def _provider_item(self, provider_domain: str) -> BrowseMediaSource: if provider is None: raise BrowseError("Unknown provider") + if params is not None: + params = f"?{params}" + else: + params = "" + return BrowseMediaSource( domain=DOMAIN, - identifier=provider_domain, + identifier=f"{provider_domain}{params}", media_class=MEDIA_CLASS_APP, media_content_type="provider", title=provider.name, From a6bab899261591212126145136339417bbacaaed Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Feb 2022 08:05:27 -0800 Subject: [PATCH 2/2] Add test --- homeassistant/components/tts/media_source.py | 2 +- tests/components/tts/test_media_source.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tts/media_source.py b/homeassistant/components/tts/media_source.py index d00cd4f5a27407..43c3998849c897 100644 --- a/homeassistant/components/tts/media_source.py +++ b/homeassistant/components/tts/media_source.py @@ -99,7 +99,7 @@ def _provider_item( if provider is None: raise BrowseError("Unknown provider") - if params is not None: + if params: params = f"?{params}" else: params = "" diff --git a/tests/components/tts/test_media_source.py b/tests/components/tts/test_media_source.py index 3bfd204a228720..22edfef535855a 100644 --- a/tests/components/tts/test_media_source.py +++ b/tests/components/tts/test_media_source.py @@ -42,6 +42,20 @@ async def test_browsing(hass): hass, item.children[0].media_content_id ) assert item_child is not None + assert item_child.media_content_id == item.children[0].media_content_id + assert item_child.title == "Demo" + assert item_child.children is None + assert item_child.can_play is False + assert item_child.can_expand is True + + item_child = await media_source.async_browse_media( + hass, item.children[0].media_content_id + "?message=bla" + ) + assert item_child is not None + assert ( + item_child.media_content_id + == item.children[0].media_content_id + "?message=bla" + ) assert item_child.title == "Demo" assert item_child.children is None assert item_child.can_play is False