Send tab defaults with presets.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-08 19:40:22 +13:00
parent d8b33923d5
commit 0e96223bf6
6 changed files with 138 additions and 42 deletions

View File

@@ -4,6 +4,7 @@ from models.preset import Preset
from models.profile import Profile
from models.espnow import ESPNow
from util.espnow_message import build_message, build_preset_dict
import asyncio
import json
controller = Microdot()
@@ -130,8 +131,9 @@ async def send_presets(request, session):
return json.dumps({"error": "preset_ids must be a non-empty list"}), 400, {'Content-Type': 'application/json'}
save_flag = data.get('save', True)
save_flag = bool(save_flag)
default_id = data.get('default')
# Build API-compliant preset map keyed by preset ID (not name)
# Build API-compliant preset map keyed by preset ID, include name
current_profile_id = get_current_profile_id(session)
presets_by_name = {}
for pid in preset_ids:
@@ -140,21 +142,27 @@ async def send_presets(request, session):
continue
if str(preset_data.get("profile_id")) != str(current_profile_id):
continue
preset_id_key = str(pid)
presets_by_name[preset_id_key] = build_preset_dict(preset_data)
preset_key = str(pid)
preset_payload = build_preset_dict(preset_data)
preset_payload["name"] = preset_data.get("name", "")
presets_by_name[preset_key] = preset_payload
if not presets_by_name:
return json.dumps({"error": "No matching presets found"}), 404, {'Content-Type': 'application/json'}
if default_id is not None and str(default_id) not in presets_by_name:
default_id = None
# Use shared ESPNow singleton
esp = ESPNow()
async def send_chunk(chunk_presets):
# Include save flag so the led-driver can persist when desired.
msg = build_message(presets=chunk_presets, save=save_flag)
msg = build_message(presets=chunk_presets, save=save_flag, default=default_id)
await esp.send(msg)
MAX_BYTES = 240
SEND_DELAY_MS = 100
entries = list(presets_by_name.items())
total_presets = len(entries)
messages_sent = 0
@@ -164,7 +172,7 @@ async def send_presets(request, session):
for name, preset_obj in entries:
test_batch = dict(batch)
test_batch[name] = preset_obj
test_msg = build_message(presets=test_batch, save=save_flag)
test_msg = build_message(presets=test_batch, save=save_flag, default=default_id)
size = len(test_msg)
if size <= MAX_BYTES or not batch:
@@ -172,12 +180,14 @@ async def send_presets(request, session):
last_msg = test_msg
else:
await send_chunk(batch)
await asyncio.sleep_ms(SEND_DELAY_MS)
messages_sent += 1
batch = {name: preset_obj}
last_msg = build_message(presets=batch, save=save_flag)
last_msg = build_message(presets=batch, save=save_flag, default=default_id)
if batch:
await send_chunk(batch)
await asyncio.sleep_ms(SEND_DELAY_MS)
messages_sent += 1
return json.dumps({