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(
|
@websocket_api.websocket_command(
|
||||||
{
|
{
|
||||||
"type": "tts/engine/list",
|
"type": "tts/engine/list",
|
||||||
|
vol.Optional("country"): str,
|
||||||
vol.Optional("language"): 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."""
|
"""List text to speech engines and, optionally, if they support a given language."""
|
||||||
manager: SpeechManager = hass.data[DOMAIN]
|
manager: SpeechManager = hass.data[DOMAIN]
|
||||||
|
|
||||||
|
country = msg.get("country")
|
||||||
language = msg.get("language")
|
language = msg.get("language")
|
||||||
providers = []
|
providers = []
|
||||||
for engine_id, provider in manager.providers.items():
|
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:
|
if language:
|
||||||
provider_info["language_supported"] = bool(
|
provider_info["supported_languages"] = language_util.matches(
|
||||||
language_util.matches(language, provider.supported_languages)
|
language, provider.supported_languages, country
|
||||||
)
|
)
|
||||||
providers.append(provider_info)
|
providers.append(provider_info)
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
|
|
||||||
from tests.common import MockPlatform
|
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"]
|
TEST_LANGUAGES = ["de", "en"]
|
||||||
|
|
||||||
DEFAULT_LANG = "en_US"
|
DEFAULT_LANG = "en_US"
|
||||||
|
|
|
@ -1041,14 +1041,21 @@ async def test_ws_list_engines(
|
||||||
|
|
||||||
msg = await client.receive_json()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
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"})
|
await client.send_json_auto_id({"type": "tts/engine/list", "language": "smurfish"})
|
||||||
|
|
||||||
msg = await client.receive_json()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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"})
|
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()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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"})
|
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()
|
msg = await client.receive_json()
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
assert msg["result"] == {
|
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
Add a link
Reference in a new issue