根据官网代码规范优化结构,精简代码。使用reconfigure模式支持重设参数。增加多实例支持。去掉debug信息。

This commit is contained in:
Howell Jiang
2025-04-18 15:42:59 +08:00
parent c8415edaeb
commit 2d3f8cd3b0
12 changed files with 129 additions and 200 deletions
+40 -94
View File
@@ -1,4 +1,4 @@
"""Config flow for Baidu TTS integration."""
"""Config flow for Baidu Voice integration."""
from __future__ import annotations
@@ -7,13 +7,12 @@ from typing import Any
import voluptuous as vol
from homeassistant.config_entries import (
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.helpers.selector import (
SelectSelector,
SelectSelectorConfig,
SelectSelectorMode,
)
from homeassistant.core import callback
from .const import (
CONF_API_KEY,
@@ -62,6 +61,9 @@ STEP_USER_DATA_SCHEMA = vol.Schema(
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
),
@@ -69,102 +71,46 @@ STEP_USER_DATA_SCHEMA = vol.Schema(
)
class BaiduTTSConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle a config flow for Baidu TTS."""
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:
# Provide unique ID to prevent duplicate entries
app_id = user_input[CONF_APP_ID]
await self.async_set_unique_id(f"baidu_tts_{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="百度语音合成", data=user_input)
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)
@classmethod
@callback
def async_get_options_flow(cls, config_entry: ConfigEntry) -> BaiduTTSOptionsFlow:
"""Get the options flow for this handler."""
return BaiduTTSOptionsFlow()
class BaiduTTSOptionsFlow(OptionsFlow):
"""Baidu TTS integration options handler."""
async def async_step_init(
self, user_input: dict[str, Any] | None = None
) -> ConfigFlowResult:
"""Manage the options."""
if user_input is not None:
return self.async_create_entry(title="", data=user_input)
options = self.config_entry.options
data = self.config_entry.data
schema = {
vol.Required(
CONF_APP_ID,
default=options.get(CONF_APP_ID, data.get(CONF_APP_ID)),
): str,
vol.Required(
CONF_API_KEY,
default=options.get(CONF_API_KEY, data.get(CONF_API_KEY)),
): str,
vol.Required(
CONF_SECRET_KEY,
default=options.get(CONF_SECRET_KEY, data.get(CONF_SECRET_KEY)),
): str,
vol.Required(
TTS_CONF_LANGUAGE,
default=options.get(TTS_CONF_LANGUAGE, data.get(TTS_CONF_LANGUAGE)),
): vol.In(TTS_LANGUAGES),
vol.Optional(
TTS_CONF_SPEED,
default=options.get(
TTS_CONF_SPEED, data.get(TTS_CONF_SPEED, TTS_DEFAULT_SPEED)
),
): vol.All(vol.Coerce(int), vol.Range(min=0, max=9)),
vol.Optional(
TTS_CONF_PITCH,
default=options.get(
TTS_CONF_PITCH, data.get(TTS_CONF_PITCH, TTS_DEFAULT_PITCH)
),
): vol.All(vol.Coerce(int), vol.Range(min=0, max=9)),
vol.Optional(
TTS_CONF_VOLUME,
default=options.get(
TTS_CONF_VOLUME, data.get(TTS_CONF_VOLUME, TTS_DEFAULT_VOLUME)
),
): vol.All(vol.Coerce(int), vol.Range(min=0, max=15)),
vol.Optional(
TTS_CONF_VOICE,
default=options.get(
TTS_CONF_VOICE, data.get(TTS_CONF_VOICE, TTS_DEFAULT_VOICE)
),
): vol.In(TTS_SUPPORTED_VOICES),
vol.Optional(
TTS_CONF_FILEFORMAT,
default=options.get(
TTS_CONF_FILEFORMAT,
data.get(TTS_CONF_FILEFORMAT, TTS_DEFAULT_FILEFORMAT),
),
): vol.In(TTS_FILEFORMAT_MAP),
vol.Optional(
STT_CONF_LANGUAGE,
default=options.get(
STT_CONF_LANGUAGE, data.get(STT_CONF_LANGUAGE, STT_DEFAULT_LANGUAGE)
),
): vol.In(STT_LANGUAGES),
}
return self.async_show_form(
step_id="init",
data_schema=vol.Schema(schema),
)