Files

117 lines
3.4 KiB
Python

"""Config flow for Baidu Voice integration."""
from __future__ import annotations
import logging
from typing import Any
import voluptuous as vol
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.helpers.selector import (
SelectSelector,
SelectSelectorConfig,
SelectSelectorMode,
)
from .const import (
CONF_API_KEY,
CONF_APP_ID,
CONF_SECRET_KEY,
DOMAIN,
STT_CONF_LANGUAGE,
STT_DEFAULT_LANGUAGE,
STT_LANGUAGES,
TTS_CONF_FILEFORMAT,
TTS_CONF_LANGUAGE,
TTS_CONF_PITCH,
TTS_CONF_SPEED,
TTS_CONF_VOICE,
TTS_CONF_VOLUME,
TTS_DEFAULT_FILEFORMAT,
TTS_DEFAULT_LANGUAGE,
TTS_DEFAULT_PITCH,
TTS_DEFAULT_SPEED,
TTS_DEFAULT_VOICE,
TTS_DEFAULT_VOLUME,
TTS_FILEFORMAT_MAP,
TTS_LANGUAGES,
TTS_SUPPORTED_VOICES,
)
_LOGGER = logging.getLogger(__name__)
STEP_USER_DATA_SCHEMA = vol.Schema(
{
vol.Required(CONF_APP_ID): str,
vol.Required(CONF_API_KEY): str,
vol.Required(CONF_SECRET_KEY): str,
vol.Required(TTS_CONF_LANGUAGE, default=TTS_DEFAULT_LANGUAGE): vol.In(
TTS_LANGUAGES
),
vol.Optional(TTS_CONF_SPEED, default=TTS_DEFAULT_SPEED): vol.All(
vol.Coerce(int), vol.Range(min=0, max=9)
),
vol.Optional(TTS_CONF_PITCH, default=TTS_DEFAULT_PITCH): vol.All(
vol.Coerce(int), vol.Range(min=0, max=9)
),
vol.Optional(TTS_CONF_VOLUME, default=TTS_DEFAULT_VOLUME): vol.All(
vol.Coerce(int), vol.Range(min=0, max=15)
),
vol.Optional(TTS_CONF_VOICE, default=TTS_DEFAULT_VOICE): vol.In(
TTS_SUPPORTED_VOICES
),
vol.Optional(TTS_CONF_FILEFORMAT, default=TTS_DEFAULT_FILEFORMAT): vol.In(
TTS_FILEFORMAT_MAP
),
vol.Optional(STT_CONF_LANGUAGE, default=STT_DEFAULT_LANGUAGE): vol.In(
STT_LANGUAGES
),
}
)
class BaiduVoiceConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle a config flow for Baidu Voice."""
VERSION = 1
async def async_step_reconfigure(self, user_input: dict[str, Any] | None = None):
"""Handle reconfiguration of the integration."""
if user_input is not None:
return self.async_update_reload_and_abort(
self._get_reconfigure_entry(),
data_updates=user_input,
)
schema = self.add_suggested_values_to_schema(
STEP_USER_DATA_SCHEMA, self._get_reconfigure_entry().data
)
schema = schema.extend(
{
vol.Required(CONF_APP_ID): SelectSelector(
SelectSelectorConfig(
options=[self._get_reconfigure_entry().data[CONF_APP_ID]],
mode=SelectSelectorMode.DROPDOWN,
)
)
}
)
return self.async_show_form(
step_id="reconfigure",
data_schema=schema,
)
async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
"""Handle the initial step."""
if user_input is not None:
app_id = user_input[CONF_APP_ID]
await self.async_set_unique_id(f"baidu_voice_{app_id}")
self._abort_if_unique_id_configured()
return self.async_create_entry(title="Baidu Voice", data=user_input)
return self.async_show_form(step_id="user", data_schema=STEP_USER_DATA_SCHEMA)