mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 13:57:10 +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,
|
language=language,
|
||||||
voice=options.get(
|
voice=options.get(
|
||||||
ATTR_VOICE,
|
ATTR_VOICE,
|
||||||
|
(
|
||||||
self._voice
|
self._voice
|
||||||
if language == self._language
|
if language == self._language
|
||||||
else DEFAULT_VOICES[language],
|
else DEFAULT_VOICES[language]
|
||||||
|
),
|
||||||
),
|
),
|
||||||
gender=options.get(ATTR_GENDER),
|
gender=options.get(ATTR_GENDER),
|
||||||
),
|
),
|
||||||
@ -435,6 +437,8 @@ class CloudTTSEntity(TextToSpeechEntity):
|
|||||||
class CloudProvider(Provider):
|
class CloudProvider(Provider):
|
||||||
"""Home Assistant Cloud speech API provider."""
|
"""Home Assistant Cloud speech API provider."""
|
||||||
|
|
||||||
|
has_entity = True
|
||||||
|
|
||||||
def __init__(self, cloud: Cloud[CloudClient]) -> None:
|
def __init__(self, cloud: Cloud[CloudClient]) -> None:
|
||||||
"""Initialize cloud provider."""
|
"""Initialize cloud provider."""
|
||||||
self.cloud = cloud
|
self.cloud = cloud
|
||||||
|
@ -1212,6 +1212,9 @@ def websocket_list_engines(
|
|||||||
if entity.platform:
|
if entity.platform:
|
||||||
entity_domains.add(entity.platform.platform_name)
|
entity_domains.add(entity.platform.platform_name)
|
||||||
for engine_id, provider in hass.data[DATA_TTS_MANAGER].providers.items():
|
for engine_id, provider in hass.data[DATA_TTS_MANAGER].providers.items():
|
||||||
|
if provider.has_entity:
|
||||||
|
continue
|
||||||
|
|
||||||
provider_info = {
|
provider_info = {
|
||||||
"engine_id": engine_id,
|
"engine_id": engine_id,
|
||||||
"name": provider.name,
|
"name": provider.name,
|
||||||
|
@ -207,6 +207,7 @@ class Provider:
|
|||||||
|
|
||||||
hass: HomeAssistant | None = None
|
hass: HomeAssistant | None = None
|
||||||
name: str | None = None
|
name: str | None = None
|
||||||
|
has_entity: bool = False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def default_language(self) -> str | None:
|
def default_language(self) -> str | None:
|
||||||
|
@ -145,13 +145,20 @@ class TTSMediaSource(MediaSource):
|
|||||||
return self._engine_item(engine, params)
|
return self._engine_item(engine, params)
|
||||||
|
|
||||||
# Root. List providers.
|
# Root. List providers.
|
||||||
children = [
|
children = sorted(
|
||||||
self._engine_item(engine)
|
[
|
||||||
for engine in self.hass.data[DATA_TTS_MANAGER].providers
|
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)
|
self._engine_item(entity.entity_id)
|
||||||
for entity in self.hass.data[DATA_COMPONENT].entities
|
for entity in self.hass.data[DATA_COMPONENT].entities
|
||||||
]
|
],
|
||||||
|
key=lambda x: x.title,
|
||||||
|
)
|
||||||
return BrowseMediaSource(
|
return BrowseMediaSource(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
identifier=None,
|
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(
|
@pytest.mark.parametrize(
|
||||||
("setup", "engine_id", "extra_data"),
|
("setup", "engine_id", "extra_data"),
|
||||||
[
|
[
|
||||||
|
@ -114,6 +114,13 @@ async def test_legacy_resolving(
|
|||||||
await mock_setup(hass, mock_provider)
|
await mock_setup(hass, mock_provider)
|
||||||
mock_get_tts_audio = mock_provider.get_tts_audio
|
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()
|
mock_get_tts_audio.reset_mock()
|
||||||
media_id = "media-source://tts/test?message=Hello%20World"
|
media_id = "media-source://tts/test?message=Hello%20World"
|
||||||
media = await media_source.async_resolve_media(hass, media_id, None)
|
media = await media_source.async_resolve_media(hass, media_id, None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user