Include matching languages in WS tts/engine/list (#91732)
* Include matching languages in WS tts/engine/list * Allow specifying country
This commit is contained in:
parent
6d619579b4
commit
79de27a4a9
3 changed files with 38 additions and 8 deletions
|
@ -715,6 +715,7 @@ def get_base_url(hass: HomeAssistant) -> str:
|
|||
@websocket_api.websocket_command(
|
||||
{
|
||||
"type": "tts/engine/list",
|
||||
vol.Optional("country"): str,
|
||||
vol.Optional("language"): str,
|
||||
}
|
||||
)
|
||||
|
@ -725,13 +726,17 @@ def websocket_list_engines(
|
|||
"""List text to speech engines and, optionally, if they support a given language."""
|
||||
manager: SpeechManager = hass.data[DOMAIN]
|
||||
|
||||
country = msg.get("country")
|
||||
language = msg.get("language")
|
||||
providers = []
|
||||
for engine_id, provider in manager.providers.items():
|
||||
provider_info: dict[str, Any] = {"engine_id": engine_id}
|
||||
provider_info: dict[str, Any] = {
|
||||
"engine_id": engine_id,
|
||||
"supported_languages": provider.supported_languages,
|
||||
}
|
||||
if language:
|
||||
provider_info["language_supported"] = bool(
|
||||
language_util.matches(language, provider.supported_languages)
|
||||
provider_info["supported_languages"] = language_util.matches(
|
||||
language, provider.supported_languages, country
|
||||
)
|
||||
providers.append(provider_info)
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
|||
|
||||
from tests.common import MockPlatform
|
||||
|
||||
SUPPORT_LANGUAGES = ["de_DE", "en_GB", "en_US"]
|
||||
SUPPORT_LANGUAGES = ["de_CH", "de_DE", "en_GB", "en_US"]
|
||||
TEST_LANGUAGES = ["de", "en"]
|
||||
|
||||
DEFAULT_LANG = "en_US"
|
||||
|
|
|
@ -1041,14 +1041,21 @@ async def test_ws_list_engines(
|
|||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {"providers": [{"engine_id": "test"}]}
|
||||
assert msg["result"] == {
|
||||
"providers": [
|
||||
{
|
||||
"engine_id": "test",
|
||||
"supported_languages": ["de_CH", "de_DE", "en_GB", "en_US"],
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list", "language": "smurfish"})
|
||||
|
||||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": "test", "language_supported": False}]
|
||||
"providers": [{"engine_id": "test", "supported_languages": []}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list", "language": "en"})
|
||||
|
@ -1056,7 +1063,7 @@ async def test_ws_list_engines(
|
|||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": "test", "language_supported": True}]
|
||||
"providers": [{"engine_id": "test", "supported_languages": ["en_US", "en_GB"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list", "language": "en-UK"})
|
||||
|
@ -1064,7 +1071,25 @@ async def test_ws_list_engines(
|
|||
msg = await client.receive_json()
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": "test", "language_supported": True}]
|
||||
"providers": [{"engine_id": "test", "supported_languages": ["en_GB", "en_US"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id({"type": "tts/engine/list", "language": "de"})
|
||||
msg = await client.receive_json()
|
||||
assert msg["type"] == "result"
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": "test", "supported_languages": ["de_DE", "de_CH"]}]
|
||||
}
|
||||
|
||||
await client.send_json_auto_id(
|
||||
{"type": "tts/engine/list", "language": "de", "country": "ch"}
|
||||
)
|
||||
msg = await client.receive_json()
|
||||
assert msg["type"] == "result"
|
||||
assert msg["success"]
|
||||
assert msg["result"] == {
|
||||
"providers": [{"engine_id": "test", "supported_languages": ["de_CH", "de_DE"]}]
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue