mirror of
https://github.com/home-assistant/core.git
synced 2025-07-07 13:27:09 +00:00
Ensure legacy TTS providers are hidden if entity exists (#143992)
This commit is contained in:
parent
7d89804a87
commit
c4eddc8d11
@ -418,9 +418,11 @@ class CloudTTSEntity(TextToSpeechEntity):
|
||||
language=language,
|
||||
voice=options.get(
|
||||
ATTR_VOICE,
|
||||
self._voice
|
||||
if language == self._language
|
||||
else DEFAULT_VOICES[language],
|
||||
(
|
||||
self._voice
|
||||
if language == self._language
|
||||
else DEFAULT_VOICES[language]
|
||||
),
|
||||
),
|
||||
gender=options.get(ATTR_GENDER),
|
||||
),
|
||||
@ -435,6 +437,8 @@ class CloudTTSEntity(TextToSpeechEntity):
|
||||
class CloudProvider(Provider):
|
||||
"""Home Assistant Cloud speech API provider."""
|
||||
|
||||
has_entity = True
|
||||
|
||||
def __init__(self, cloud: Cloud[CloudClient]) -> None:
|
||||
"""Initialize cloud provider."""
|
||||
self.cloud = cloud
|
||||
|
@ -1212,6 +1212,9 @@ def websocket_list_engines(
|
||||
if entity.platform:
|
||||
entity_domains.add(entity.platform.platform_name)
|
||||
for engine_id, provider in hass.data[DATA_TTS_MANAGER].providers.items():
|
||||
if provider.has_entity:
|
||||
continue
|
||||
|
||||
provider_info = {
|
||||
"engine_id": engine_id,
|
||||
"name": provider.name,
|
||||
|
@ -207,6 +207,7 @@ class Provider:
|
||||
|
||||
hass: HomeAssistant | None = None
|
||||
name: str | None = None
|
||||
has_entity: bool = False
|
||||
|
||||
@property
|
||||
def default_language(self) -> str | None:
|
||||
|
@ -145,13 +145,20 @@ class TTSMediaSource(MediaSource):
|
||||
return self._engine_item(engine, params)
|
||||
|
||||
# Root. List providers.
|
||||
children = [
|
||||
self._engine_item(engine)
|
||||
for engine in self.hass.data[DATA_TTS_MANAGER].providers
|
||||
] + [
|
||||
self._engine_item(entity.entity_id)
|
||||
for entity in self.hass.data[DATA_COMPONENT].entities
|
||||
]
|
||||
children = sorted(
|
||||
[
|
||||
self._engine_item(engine_id)
|
||||
for engine_id, provider in self.hass.data[
|
||||
DATA_TTS_MANAGER
|
||||
].providers.items()
|
||||
if not provider.has_entity
|
||||
]
|
||||
+ [
|
||||
self._engine_item(entity.entity_id)
|
||||
for entity in self.hass.data[DATA_COMPONENT].entities
|
||||
],
|
||||
key=lambda x: x.title,
|
||||
)
|
||||
return BrowseMediaSource(
|
||||
domain=DOMAIN,
|
||||
identifier=None,
|
||||
|
@ -1522,6 +1522,45 @@ async def test_fetching_in_async(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("setup", "engine_id"),
|
||||
[
|
||||
("mock_setup", "test"),
|
||||
],
|
||||
indirect=["setup"],
|
||||
)
|
||||
async def test_ws_list_engines_filter_deprecated(
|
||||
hass: HomeAssistant,
|
||||
hass_ws_client: WebSocketGenerator,
|
||||
setup: str,
|
||||
engine_id: str,
|
||||
) -> None:
|
||||
"""Test listing tts engines and supported languages."""
|
||||
client = await hass_ws_client()
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list"})
|
||||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [
|
||||
{
|
||||
"name": "Test",
|
||||
"engine_id": engine_id,
|
||||
"supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"],
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
hass.data[tts.DATA_TTS_MANAGER].providers[engine_id].has_entity = True
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list"})
|
||||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {"providers": []}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("setup", "engine_id", "extra_data"),
|
||||
[
|
||||
|
@ -114,6 +114,13 @@ async def test_legacy_resolving(
|
||||
await mock_setup(hass, mock_provider)
|
||||
mock_get_tts_audio = mock_provider.get_tts_audio
|
||||
|
||||
mock_provider.has_entity = True
|
||||
root = await media_source.async_browse_media(hass, "media-source://tts")
|
||||
assert len(root.children) == 0
|
||||
mock_provider.has_entity = False
|
||||
root = await media_source.async_browse_media(hass, "media-source://tts")
|
||||
assert len(root.children) == 1
|
||||
|
||||
mock_get_tts_audio.reset_mock()
|
||||
media_id = "media-source://tts/test?message=Hello%20World"
|
||||
media = await media_source.async_resolve_media(hass, media_id, None)
|
||||
|
Loading…
x
Reference in New Issue
Block a user