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:
Erik Montnemery 2023-04-20 14:56:50 +02:00 committed by GitHub
parent 6d619579b4
commit 79de27a4a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 8 deletions

View file

@ -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)

View file

@ -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"

View file

@ -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"]}]
}