P6-R2: Session manager — save/load mixer states with setlists and snapshots
Lint & Validate / lint (push) Has been cancelled
Lint & Validate / lint (push) Has been cancelled
Core session management:
- MixerSession: full mixer state as versioned JSON (channels, buses, routing, plugins, MIDI, transport, automation)
- SessionManager: save/load/list/delete/rename/duplicate/import/export sessions to ~/.config/rpi-mixer/sessions/
- Setlist: ordered collection of sessions with transition types (cut, crossfade, wait)
- SnapshotEngine: instant scene capture/recall with persistence, categories, next/prev
API endpoints (all under /api/v1/):
- GET/POST/DELETE /sessions — list, save, load, delete, info
- POST /sessions/{name}/rename, /duplicate, /export, /import
- GET/POST/DELETE /setlists — list, save, load, delete
- GET/POST/DELETE /snapshots — list, capture, recall, delete, next, prev
- GET/POST /sessions/autosave — status, enable, disable
Web UI:
- Sessions tab: full session browser with load/delete/duplicate/export
- Setlists subtab: create/edit/activate setlist with entry management
- Snapshots subtab: capture/recall with category badges
- Auto-save status indicator
- Import/export all sessions as zip
Kivy touchscreen UI:
- New SES tab with sessions/setlists/snapshots sub-views
- Touch-optimized cards with save/load/delete actions
Tests: 51 new tests, 735 project total — all passing
This commit is contained in:
@@ -81,8 +81,14 @@ class SessionManager:
|
||||
self._max_autosave_history = max_autosave_history
|
||||
|
||||
# Ensure directories exist
|
||||
self._sessions_dir.mkdir(parents=True, exist_ok=True)
|
||||
self._setlists_dir.mkdir(parents=True, exist_ok=True)
|
||||
try:
|
||||
self._sessions_dir.mkdir(parents=True, exist_ok=True)
|
||||
except OSError as exc:
|
||||
logger.warning("Cannot create sessions directory %s: %s", self._sessions_dir, exc)
|
||||
try:
|
||||
self._setlists_dir.mkdir(parents=True, exist_ok=True)
|
||||
except OSError as exc:
|
||||
logger.warning("Cannot create setlists directory %s: %s", self._setlists_dir, exc)
|
||||
|
||||
# Auto-save state
|
||||
self._lock = threading.Lock()
|
||||
|
||||
Reference in New Issue
Block a user