Files
led-controller/src/models/preset.py
jimmy 6c6ed22dbe Scope presets to active profiles and support cloning.
This keeps data isolated per profile while letting users duplicate setups quickly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 13:51:02 +13:00

69 lines
1.9 KiB
Python

from models.model import Model
from models.profile import Profile
class Preset(Model):
def __init__(self):
super().__init__()
# Backfill profile ownership for existing presets.
try:
profiles = Profile()
profile_list = profiles.list()
default_profile_id = profile_list[0] if profile_list else None
changed = False
for preset_id, preset_data in list(self.items()):
if isinstance(preset_data, dict) and "profile_id" not in preset_data:
if default_profile_id is not None:
preset_data["profile_id"] = str(default_profile_id)
changed = True
if changed:
self.save()
except Exception:
pass
def create(self, profile_id=None):
next_id = self.get_next_id()
self[next_id] = {
"name": "",
"pattern": "",
"colors": [],
"brightness": 0,
"delay": 0,
"n1": 0,
"n2": 0,
"n3": 0,
"n4": 0,
"n5": 0,
"n6": 0,
"n7": 0,
"n8": 0,
"profile_id": str(profile_id) if profile_id is not None else None,
}
self.save()
return next_id
def read(self, id):
id_str = str(id)
if id_str not in self:
return None
return self[id_str]
def update(self, id, data):
id_str = str(id)
if id_str not in self:
return False
self[id_str].update(data)
self.save()
return True
def delete(self, id):
id_str = str(id)
if id_str not in self:
return False
self.pop(id_str)
self.save()
return True
def list(self):
return list(self.keys())