Call setting hooks after change, rather than before

More convenient for functions that already read the current value
from settings.[...]. See next commit

Signed-off-by: Jesús <heckyel@hyperbola.info>
This commit is contained in:
James Taylor 2021-07-19 13:59:11 -07:00 committed by Jesús
parent 4a5a64a975
commit 5df5e99213
No known key found for this signature in database
GPG Key ID: F6EE7BC59A315766

View File

@ -392,7 +392,7 @@ hooks = {}
def add_setting_changed_hook(setting, func): def add_setting_changed_hook(setting, func):
'''Called right before new settings take effect''' '''Called right after new settings take effect'''
if setting in hooks: if setting in hooks:
hooks[setting].append(func) hooks[setting].append(func)
else: else:
@ -447,15 +447,21 @@ def settings_page():
assert SETTINGS_INFO[setting_name]['type'] is bool, missing_inputs assert SETTINGS_INFO[setting_name]['type'] is bool, missing_inputs
current_settings_dict[setting_name] = False current_settings_dict[setting_name] = False
# call setting hooks # find settings that have changed to prepare setting hook calls
to_call = []
for setting_name, value in current_settings_dict.items(): for setting_name, value in current_settings_dict.items():
old_value = globals()[setting_name] old_value = globals()[setting_name]
if value != old_value and setting_name in hooks: if value != old_value and setting_name in hooks:
for func in hooks[setting_name]: for func in hooks[setting_name]:
func(old_value, value) to_call.append((func, old_value, value))
globals().update(current_settings_dict) globals().update(current_settings_dict)
save_settings(current_settings_dict) save_settings(current_settings_dict)
# call setting hooks
for func, old_value, value in to_call:
func(old_value, value)
return flask.redirect(util.URL_ORIGIN + '/settings', 303) return flask.redirect(util.URL_ORIGIN + '/settings', 303)
else: else:
flask.abort(400) flask.abort(400)