mirror of
https://github.com/howelljiang/baidu-voice.git
synced 2026-07-28 10:03:56 +08:00
根据官网代码规范优化结构,精简代码。使用reconfigure模式支持重设参数。增加多实例支持。去掉debug信息。
This commit is contained in:
@@ -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),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user