feat: manual odometer baseline — Settings field computes baseline + trip distance, Dashboard shows (manual) label
This commit is contained in:
+13
-2
@@ -26,8 +26,11 @@ def _setting_bool(key, env_name=None, default=False):
|
||||
return app_sql.get_setting(key, fallback) == "1"
|
||||
|
||||
|
||||
def _number_value(setting_key, converter):
|
||||
default = app_alerts.SETTING_DEFAULTS[setting_key]
|
||||
def _number_value(setting_key, converter, fallback=None):
|
||||
if fallback is not None:
|
||||
default = fallback
|
||||
else:
|
||||
default = app_alerts.SETTING_DEFAULTS[setting_key]
|
||||
try:
|
||||
return converter(app_sql.get_setting(setting_key, default))
|
||||
except (TypeError, ValueError):
|
||||
@@ -53,6 +56,7 @@ def get_settings():
|
||||
"ntfy_token_configured": bool(
|
||||
app_sql.get_setting("alert_ntfy_token", "")
|
||||
),
|
||||
"odometer_baseline": _number_value("odometer_baseline", float, 0),
|
||||
"alert_thresholds": {
|
||||
field: _number_value(setting_key, converter)
|
||||
for field, (
|
||||
@@ -132,6 +136,10 @@ def update_settings(body):
|
||||
if values["cellular_enabled"] and not apn:
|
||||
errors["cellular_apn"] = "An APN is required when cellular is enabled."
|
||||
|
||||
values["odometer_baseline"] = _bounded_number(
|
||||
body, "odometer_baseline", float, 0, 999_999, errors
|
||||
)
|
||||
|
||||
ntfy_url = body.get("ntfy_url")
|
||||
ntfy_token = body.get("ntfy_token")
|
||||
if not isinstance(ntfy_url, str):
|
||||
@@ -199,6 +207,9 @@ def update_settings(body):
|
||||
for setting_key, _converter, _minimum, _maximum in _NUMBER_FIELDS.values():
|
||||
settings[setting_key] = str(values[setting_key])
|
||||
|
||||
if values["odometer_baseline"] is not None:
|
||||
settings["odometer_baseline"] = str(values["odometer_baseline"])
|
||||
|
||||
if values["clear_ntfy_url"]:
|
||||
settings["alert_ntfy_url"] = ""
|
||||
elif ntfy_url:
|
||||
|
||||
Reference in New Issue
Block a user