Add clone support for scene presets and update TODO
- Add clone_preset() to ScenePresetStore with deep copy of target snapshots
- Add POST /scene-presets/{id}/clone API endpoint
- Add clone button to scene preset cards in Automations tab
- Add i18n keys for clone feedback in all 3 locales
- Add TODO items for dashboard stats collapse and protocol badge review
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from wled_controller.storage.scene_preset import ScenePreset
|
||||
from wled_controller.storage.scene_preset import ScenePreset, TargetSnapshot
|
||||
from wled_controller.utils import atomic_write_json, get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
@@ -117,6 +117,25 @@ class ScenePresetStore:
|
||||
logger.info(f"Recaptured scene preset: {preset_id}")
|
||||
return existing
|
||||
|
||||
def clone_preset(self, preset_id: str) -> ScenePreset:
|
||||
"""Duplicate an existing preset with a new ID and '(Copy)' suffix."""
|
||||
if preset_id not in self._presets:
|
||||
raise ValueError(f"Scene preset not found: {preset_id}")
|
||||
|
||||
source = self._presets[preset_id]
|
||||
new_id = f"scene_{uuid.uuid4().hex[:8]}"
|
||||
cloned = ScenePreset(
|
||||
id=new_id,
|
||||
name=f"{source.name} (Copy)",
|
||||
description=source.description,
|
||||
targets=[TargetSnapshot.from_dict(t.to_dict()) for t in source.targets],
|
||||
order=source.order,
|
||||
)
|
||||
self._presets[new_id] = cloned
|
||||
self._save()
|
||||
logger.info(f"Cloned scene preset: {preset_id} -> {new_id}")
|
||||
return cloned
|
||||
|
||||
def delete_preset(self, preset_id: str) -> None:
|
||||
if preset_id not in self._presets:
|
||||
raise ValueError(f"Scene preset not found: {preset_id}")
|
||||
|
||||
Reference in New Issue
Block a user