diff --git a/server/src/wled_controller/api/routes.py b/server/src/wled_controller/api/routes.py index 5015d44..c602183 100644 --- a/server/src/wled_controller/api/routes.py +++ b/server/src/wled_controller/api/routes.py @@ -29,7 +29,8 @@ from wled_controller.core.calibration import ( calibration_to_dict, ) from wled_controller.storage import DeviceStore -from wled_controller.utils import get_logger, get_monitor_names +from wled_controller.utils import get_logger +from wled_controller.core.screen_capture import get_available_displays logger = get_logger(__name__) @@ -100,30 +101,23 @@ async def get_displays(_: AuthRequired): logger.info("Listing available displays") try: - # Import here to avoid issues if mss is not installed yet - import mss + # Get available displays with all metadata (name, refresh rate, etc.) + display_dataclasses = get_available_displays() - # Get friendly monitor names (Windows only, falls back to generic names) - monitor_names = get_monitor_names() - - with mss.mss() as sct: - displays = [] - - # Skip the first monitor (it's the combined virtual screen on multi-monitor setups) - for idx, monitor in enumerate(sct.monitors[1:], start=0): - # Use friendly name from WMI if available, otherwise generic name - friendly_name = monitor_names.get(idx, f"Display {idx}") - - display_info = DisplayInfo( - index=idx, - name=friendly_name, - width=monitor["width"], - height=monitor["height"], - x=monitor["left"], - y=monitor["top"], - is_primary=(idx == 0), - ) - displays.append(display_info) + # Convert dataclass DisplayInfo to Pydantic DisplayInfo + displays = [ + DisplayInfo( + index=d.index, + name=d.name, + width=d.width, + height=d.height, + x=d.x, + y=d.y, + is_primary=d.is_primary, + refresh_rate=d.refresh_rate, + ) + for d in display_dataclasses + ] logger.info(f"Found {len(displays)} displays")