79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
"""Options flow for Amazon Order Status integration."""
|
|
|
|
from homeassistant import config_entries
|
|
import voluptuous as vol
|
|
from homeassistant.helpers import config_validation as cv
|
|
|
|
from .const import DOMAIN, CONF_IMAP_FOLDER
|
|
|
|
|
|
class AmazonOrderStatusOptionsFlow(config_entries.OptionsFlow):
|
|
"""Handle an options flow for Amazon Order Status."""
|
|
|
|
def __init__(self, config_entry: config_entries.ConfigEntry):
|
|
self._config_entry = config_entry
|
|
|
|
async def async_step_init(self, user_input=None):
|
|
"""Manage the initial step of the options flow."""
|
|
if user_input is not None:
|
|
# Merge new options with existing ones
|
|
new_options = dict(self._config_entry.options)
|
|
new_options.update(user_input)
|
|
|
|
# Update the config entry
|
|
self.hass.config_entries.async_update_entry(
|
|
self._config_entry, options=new_options
|
|
)
|
|
|
|
# Apply updates to the coordinator if it exists
|
|
coordinator = self.hass.data.get(DOMAIN, {}).get("coordinator")
|
|
if coordinator:
|
|
if "delivered_retention_days" in user_input:
|
|
coordinator.async_set_retention_days(
|
|
user_input["delivered_retention_days"]
|
|
)
|
|
if "update_interval" in user_input:
|
|
coordinator.async_update_interval(
|
|
user_input["update_interval"]
|
|
)
|
|
if "mark_as_read" in user_input:
|
|
coordinator.async_set_mark_as_read(
|
|
user_input["mark_as_read"]
|
|
)
|
|
if CONF_IMAP_FOLDER in user_input:
|
|
coordinator.async_set_imap_folder(
|
|
user_input[CONF_IMAP_FOLDER]
|
|
)
|
|
|
|
return self.async_create_entry(title="", data=user_input)
|
|
|
|
# Current options to use as defaults
|
|
options = self._config_entry.options
|
|
|
|
# Standard vol.Schema
|
|
schema = vol.Schema(
|
|
{
|
|
vol.Required(
|
|
"delivered_retention_days",
|
|
default=options.get("delivered_retention_days", 30),
|
|
): cv.positive_int,
|
|
vol.Required(
|
|
"update_interval",
|
|
default=options.get("update_interval", 5),
|
|
): cv.positive_int,
|
|
vol.Required(
|
|
"mark_as_read",
|
|
default=options.get("mark_as_read", True),
|
|
): cv.boolean,
|
|
vol.Optional(
|
|
CONF_IMAP_FOLDER,
|
|
default=options.get(CONF_IMAP_FOLDER, ""),
|
|
): str,
|
|
}
|
|
)
|
|
|
|
return self.async_show_form(
|
|
step_id="init",
|
|
data_schema=schema,
|
|
)
|