feat(video, settings, docs): add muted playback, nested Settings tabs, merge holidays tab; bump 2025.1.0-alpha.11

API/DB: add Event.muted with full CRUD wiring (Alembic migration), persist/return with autoplay/loop/volume
Dashboard: per‑event video options (autoplay/loop/volume/muted) with system defaults; Settings → Events → Videos defaults
Settings UX: nested tabs with controlled selection; Academic Calendar: merge “Schulferien Import”+“Liste” into “📥 Import & Liste”
Docs: update README and copilot-instructions (video payload, streaming 206, defaults keys); update program-info.json changelog; bump version to 2025.1.0‑alpha.11
This commit is contained in:
RobbStarkAustria
2025-11-05 19:30:10 +00:00
parent 38800cec68
commit 452ba3033b
12 changed files with 793 additions and 381 deletions

View File

@@ -138,7 +138,14 @@ def get_event(event_id):
"IsAllDay": False, # Assuming events are not all-day by default
"MediaId": str(event.event_media_id) if event.event_media_id else None,
"SlideshowInterval": event.slideshow_interval,
"PageProgress": event.page_progress,
"AutoProgress": event.auto_progress,
"WebsiteUrl": event.event_media.url if event.event_media and hasattr(event.event_media, 'url') else None,
# Video-specific fields
"Autoplay": event.autoplay,
"Loop": event.loop,
"Volume": event.volume,
"Muted": event.muted,
"RecurrenceRule": event.recurrence_rule,
"RecurrenceEnd": event.recurrence_end.isoformat() if event.recurrence_end else None,
"SkipHolidays": event.skip_holidays,
@@ -398,6 +405,7 @@ def create_event():
autoplay = None
loop = None
volume = None
muted = None
if event_type == "video":
event_media_id = data.get("event_media_id")
if not event_media_id:
@@ -406,6 +414,7 @@ def create_event():
autoplay = data.get("autoplay", True)
loop = data.get("loop", False)
volume = data.get("volume", 0.8)
muted = data.get("muted", False)
# created_by aus den Daten holen, Default: None
created_by = data.get("created_by")
@@ -435,6 +444,7 @@ def create_event():
autoplay=autoplay,
loop=loop,
volume=volume,
muted=muted,
created_by=created_by,
# Recurrence
recurrence_rule=data.get("recurrence_rule"),
@@ -514,6 +524,8 @@ def update_event(event_id):
event.loop = data.get("loop")
if "volume" in data:
event.volume = data.get("volume")
if "muted" in data:
event.muted = data.get("muted")
event.created_by = data.get("created_by", event.created_by)
# Track previous values to decide on exception regeneration
prev_rule = event.recurrence_rule