feat: asset-based image/video sources, notification sounds, UI improvements
Lint & Test / test (push) Has been cancelled
Lint & Test / test (push) Has been cancelled
- Replace URL-based image_source/url fields with image_asset_id/video_asset_id on StaticImagePictureSource and VideoCaptureSource (clean break, no migration) - Resolve asset IDs to file paths at runtime via AssetStore.get_file_path() - Add EntitySelect asset pickers for image/video in stream editor modal - Add notification sound configuration (global sound + per-app overrides) - Unify per-app color and sound overrides into single "Per-App Overrides" section - Persist notification history between server restarts - Add asset management system (upload, edit, delete, soft-delete) - Replace emoji buttons with SVG icons throughout UI - Various backend improvements: SQLite stores, auth, backup, MQTT, webhooks
This commit is contained in:
@@ -7,6 +7,10 @@ mechanism the system tray "Shutdown" menu item uses.
|
||||
|
||||
from typing import Any, Optional
|
||||
|
||||
from wled_controller.utils import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
_server: Optional[Any] = None # uvicorn.Server
|
||||
_tray: Optional[Any] = None # TrayManager
|
||||
|
||||
@@ -39,7 +43,8 @@ def request_shutdown() -> None:
|
||||
try:
|
||||
from wled_controller.main import _save_all_stores
|
||||
_save_all_stores()
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
logger.debug("Best-effort store save on shutdown failed: %s", e)
|
||||
pass # best-effort; lifespan handler is the backup
|
||||
|
||||
if _server is not None:
|
||||
@@ -55,5 +60,6 @@ def _broadcast_restarting() -> None:
|
||||
pm = _deps.get("processor_manager")
|
||||
if pm is not None:
|
||||
pm.fire_event({"type": "server_restarting"})
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
logger.debug("Failed to broadcast server_restarting event: %s", e)
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user