This keeps data isolated per profile while letting users duplicate setups quickly. Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
1.9 KiB
Python
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())
|
|
|