Remove per-source speed, fix device dirty check, and add frontend caching

Speed is now exclusively controlled via sync clocks — CSS sources no longer
carry their own speed/cycle_speed fields. Streams default to 1.0× when no
clock is assigned. Also fixes false-positive dirty check on the device
settings modal (array reference comparison) and converts several frontend
modules to use DataCache for consistent API response caching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 22:07:54 +03:00
parent aa1e4a6afc
commit 39e41dfce7
15 changed files with 56 additions and 187 deletions

View File

@@ -74,9 +74,7 @@ def _css_to_response(source, overlay_active: bool = False) -> ColorStripSourceRe
color=getattr(source, "color", None),
stops=stops,
colors=getattr(source, "colors", None),
cycle_speed=getattr(source, "cycle_speed", None),
effect_type=getattr(source, "effect_type", None),
speed=getattr(source, "speed", None),
palette=getattr(source, "palette", None),
intensity=getattr(source, "intensity", None),
scale=getattr(source, "scale", None),
@@ -163,9 +161,7 @@ async def create_color_strip_source(
frame_interpolation=data.frame_interpolation,
animation=data.animation.model_dump() if data.animation else None,
colors=data.colors,
cycle_speed=data.cycle_speed,
effect_type=data.effect_type,
speed=data.speed,
palette=data.palette,
intensity=data.intensity,
scale=data.scale,
@@ -241,9 +237,7 @@ async def update_color_strip_source(
frame_interpolation=data.frame_interpolation,
animation=data.animation.model_dump() if data.animation else None,
colors=data.colors,
cycle_speed=data.cycle_speed,
effect_type=data.effect_type,
speed=data.speed,
palette=data.palette,
intensity=data.intensity,
scale=data.scale,