diff --git a/homeassistant/components/tts/media_source.py b/homeassistant/components/tts/media_source.py index 2398a6203ad..43c3998849c 100644 --- a/homeassistant/components/tts/media_source.py +++ b/homeassistant/components/tts/media_source.py @@ -70,8 +70,8 @@ class TTSMediaSource(MediaSource): ) -> 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 @@ class TTSMediaSource(MediaSource): ) @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 @@ class TTSMediaSource(MediaSource): if provider is None: raise BrowseError("Unknown provider") + if params: + 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, diff --git a/tests/components/tts/test_media_source.py b/tests/components/tts/test_media_source.py index 3bfd204a228..22edfef5358 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