Files
workphone-sdk/sdk/app/services/device_fleet.py
Manus AI 42fe10401a 1
1
2026-05-24 17:50:04 +08:00

63 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
设备列表融合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