Update palettes, profiles, tabs, preset sending, and ESPNow message format to match the new preset defaults and driver short-field schema.
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
from models.model import Model
|
|
from models.pallet import Palette
|
|
|
|
|
|
class Profile(Model):
|
|
def __init__(self):
|
|
"""Profile model.
|
|
|
|
Each profile owns a single, unique palette stored in the Palette model.
|
|
The profile stores a `palette_id` that points to its palette; any legacy
|
|
inline `palette` arrays are migrated to a dedicated Palette entry.
|
|
"""
|
|
super().__init__()
|
|
self._palette_model = Palette()
|
|
|
|
# Migrate legacy inline palettes to separate Palette entries.
|
|
changed = False
|
|
for pid, pdata in list(self.items()):
|
|
if isinstance(pdata, dict):
|
|
if "palette" in pdata and "palette_id" not in pdata:
|
|
colors = pdata.get("palette") or []
|
|
palette_id = self._palette_model.create(colors=colors)
|
|
pdata.pop("palette", None)
|
|
pdata["palette_id"] = str(palette_id)
|
|
changed = True
|
|
if changed:
|
|
self.save()
|
|
|
|
def create(self, name="", profile_type="tabs"):
|
|
"""Create a new profile and its own empty palette.
|
|
|
|
profile_type: "tabs" or "scenes" (ignoring scenes for now)
|
|
"""
|
|
next_id = self.get_next_id()
|
|
# Create a unique palette for this profile.
|
|
palette_id = self._palette_model.create(colors=[])
|
|
self[next_id] = {
|
|
"name": name,
|
|
"type": profile_type, # "tabs" or "scenes"
|
|
"tabs": [], # Array of tab IDs
|
|
"scenes": [], # Array of scene IDs (for future use)
|
|
"palette_id": str(palette_id),
|
|
}
|
|
self.save()
|
|
return next_id
|
|
|
|
def read(self, id):
|
|
id_str = str(id)
|
|
return self.get(id_str, None)
|
|
|
|
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())
|
|
|