Skip to content

Commit

Permalink
🔧 fix for config flow (#2352)
Browse files Browse the repository at this point in the history
  • Loading branch information
al-one committed Feb 11, 2025
1 parent a3eccbe commit 57447d8
Showing 1 changed file with 22 additions and 28 deletions.
50 changes: 22 additions & 28 deletions custom_components/xiaomi_miot/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ async def check_miio_device(hass, user_input, errors):
class BaseFlowHandler:
hass = None
context = None
base_input = None
config_data = None
cloud: MiotCloud = None
devices: Optional[list] = None

Expand Down Expand Up @@ -334,7 +334,7 @@ async def async_step_cloud(self, user_input=None):
await self.check_xiaomi_account(user_input, errors, renew_devices=True)
if not errors:
user_input['filtering'] = True
self.base_input = user_input
self.config_data = user_input
self.filter_models = user_input.get('filter_models')
return await self.async_step_cloud_filter(user_input)
schema = {}
Expand Down Expand Up @@ -366,21 +366,21 @@ async def async_step_cloud_filter(self, user_input=None):
user_input = {}
via_did = not self.filter_models
home_ids = user_input.pop('home_ids', [])
if user_input.get('filtering') or home_ids:
if user_input.pop('filtering', None) or home_ids:
schema = await self.get_cloud_filter_schema(user_input, errors, schema, via_did=via_did, home_ids=home_ids)
elif user_input:
prev_input = self.base_input or {}
cfg = self.cloud.to_config() or {}
cfg.update({
CONF_CONN_MODE: prev_input.get(CONF_CONN_MODE),
if not self.config_data:
self.config_data = {}
self.config_data.update({
**(self.cloud.to_config() or {}),
**user_input,
'filter_models': self.filter_models,
CONF_CONFIG_VERSION: ENTRY_VERSION,
})
cfg[CONF_CONFIG_VERSION] = ENTRY_VERSION
_LOGGER.debug('Setup xiaomi cloud: %s', {**cfg, CONF_PASSWORD: '*', 'service_token': '*'})
_LOGGER.debug('Setup xiaomi cloud: %s', {**self.config_data, CONF_PASSWORD: '*', 'service_token': '*'})
return self.async_create_entry(
title=f"Xiaomi: {cfg.get('user_id')}",
data=cfg,
title=f"Xiaomi: {self.config_data.get('user_id')}",
data=self.config_data,
)
else:
errors['base'] = 'unknown'
Expand Down Expand Up @@ -612,6 +612,7 @@ def filter_models(self):
async def async_step_init(self, user_input=None):
data = self.config_entry.data
if CONF_USERNAME in data:
self.config_data = self.saved_config
return await self.async_step_cloud()

if 'customizing_entity' in data or 'customizing_device' in data:
Expand Down Expand Up @@ -666,7 +667,7 @@ async def async_step_cloud(self, user_input=None):
await self.check_xiaomi_account(user_input, errors, renew_devices=renew)
if not errors:
user_input['filtering'] = True
self.base_input = user_input
self.config_data.update(user_input)
return await self.async_step_cloud_filter(user_input)
else:
user_input = prev_input
Expand Down Expand Up @@ -703,34 +704,27 @@ async def async_step_cloud_filter(self, user_input=None):
user_input = {}
via_did = not self.filter_models
home_ids = user_input.pop('home_ids', [])
if user_input.get('filtering') or home_ids:
if user_input.pop('filtering', None) or home_ids:
user_input = {
**self.saved_config,
**user_input,
}
schema = await self.get_cloud_filter_schema(user_input, errors, schema, via_did=via_did, home_ids=home_ids)
elif user_input:
prev_input = self.base_input or {}
cfg = {
self.config_data.update({
**(self.cloud.to_config() or {}),
**self.config_entry.data,
}
cfg.update({
CONF_CONN_MODE: prev_input.get(CONF_CONN_MODE),
'filter_models': self.filter_models,
'trans_options': prev_input.get('trans_options', False),
'disable_message': prev_input.get('disable_message', False),
'disable_scene_history': prev_input.get('disable_scene_history', False),
**user_input,
})
self.config_data.pop('filtering', None)
if self.filter_models:
cfg.pop('filter_did', None)
cfg.pop('did_list', None)
self.config_data.pop('filter_did', None)
self.config_data.pop('did_list', None)
else:
cfg.pop('filter_model', None)
cfg.pop('model_list', None)
self.hass.config_entries.async_update_entry(self.config_entry, data=cfg)
_LOGGER.debug('Setup xiaomi cloud: %s', {**cfg, CONF_PASSWORD: '*', 'service_token': '*'})
self.config_data.pop('filter_model', None)
self.config_data.pop('model_list', None)
self.hass.config_entries.async_update_entry(self.config_entry, data=self.config_data)
_LOGGER.debug('Setup xiaomi cloud: %s', {**self.config_data, CONF_PASSWORD: '*', 'service_token': '*'})
return self.async_create_entry(title='', data={})
else:
errors['base'] = 'unknown'
Expand Down

0 comments on commit 57447d8

Please sign in to comment.