""" 设备列表融合:WebSocket + MongoDB + ADB(供 /devices 与多机注册聚合复用) """ from typing import Any, Dict, List from services.ws_hub import ws_hub from services.device_manager import device_manager from services.adb_device import adb_manager from services.device_id_util import enrich_device_id_fields async def list_merged_local_devices() -> List[Dict[str, Any]]: """与 routers.devices.get_devices 逻辑一致,返回设备 dict 列表。""" db_devices: List[dict] = [] try: db_devices = await device_manager.get_all_devices() except Exception: pass online_devices = {d["device_id"]: d for d in ws_hub.get_online_devices()} seen_ids: set = set() devices: List[Dict[str, Any]] = [] for raw in db_devices: device = dict(raw) device_id = device["device_id"] seen_ids.add(device_id) if device_id in online_devices: device = {**device, **online_devices[device_id]} device["status"] = "online" else: device["status"] = "offline" devices.append(enrich_device_id_fields(device)) for device_id, info in online_devices.items(): if device_id not in seen_ids: seen_ids.add(device_id) devices.append(enrich_device_id_fields(dict(info))) adb_serials = await adb_manager.async_scan_devices() for serial in adb_serials: if serial not in seen_ids: adb_dev = adb_manager.get_device(serial) if adb_dev: info = adb_dev.get_info() devices.append( enrich_device_id_fields( { "device_id": serial, "model": info.get("model", "Unknown"), "brand": info.get("brand", "Unknown"), "android_version": info.get("android_version", "Unknown"), "status": "adb", "connection_type": "adb", "display": info.get("display", {}), } ) ) return devices