添加未信任状态,优化goios启动逻辑。 此版本为稳定版。
This commit is contained in:
@@ -69,33 +69,53 @@ class DeviceInfo:
|
||||
LogManager.method_info("进入主循环", "listen", udid="system")
|
||||
print("[Listen] 开始监听设备上下线...")
|
||||
|
||||
last_broadcast = 0.0 # 用来做“心跳全量同步”的时间戳
|
||||
|
||||
while True:
|
||||
try:
|
||||
usb = Usbmux().device_list()
|
||||
# 只看 USB 连接的设备
|
||||
online = {d.udid for d in usb if d.conn_type == ConnectionType.USB}
|
||||
except Exception as e:
|
||||
LogManager.warning(f"[device_list] 异常:{e}", udid="system")
|
||||
print("[Listen] device_list 出错,本轮视为无设备,防止状态脏死")
|
||||
usb = []
|
||||
online = set()
|
||||
time.sleep(1)
|
||||
continue
|
||||
|
||||
now = time.time()
|
||||
|
||||
# 当前已知的设备(本轮循环开始时)
|
||||
with self._lock:
|
||||
known = set(self._models.keys())
|
||||
|
||||
# ---------- 1. 新设备 ----------
|
||||
now = time.time()
|
||||
# 1. 处理在线设备
|
||||
for udid in online:
|
||||
# 更新心跳时间
|
||||
self._last_seen[udid] = now
|
||||
if udid not in known:
|
||||
try:
|
||||
self._add_device(udid)
|
||||
except Exception as e:
|
||||
LogManager.warning(f"[Add] 处理设备 {udid} 异常: {e}", udid=udid)
|
||||
print(f"[Add] 处理设备 {udid} 异常: {e}")
|
||||
|
||||
# ---------- 2. 可能离线设备 ----------
|
||||
# 已经在列表里的设备,直接跳过“是否信任”检查
|
||||
if udid in known:
|
||||
continue
|
||||
|
||||
# 只对“新发现”的设备做一次信任检查
|
||||
try:
|
||||
if not self._is_trusted(udid):
|
||||
# 未信任 / 未配对 / 暂时不可用,本轮直接跳过
|
||||
LogManager.info(f"[Add] 设备未信任或未就绪,跳过本轮添加: {udid}", udid=udid)
|
||||
print(f"[Add] 设备未信任或未就绪,跳过: {udid}")
|
||||
continue
|
||||
except Exception as e:
|
||||
# 信任检查本身异常,也当作暂时未就绪处理
|
||||
LogManager.warning(f"[Add] 检测设备 {udid} 信任状态异常: {e}", udid=udid)
|
||||
print(f"[Add] 检测设备 {udid} 信任状态异常: {e}")
|
||||
continue
|
||||
|
||||
# 确认“已信任”的新设备,才真正走 _add_device
|
||||
try:
|
||||
self._add_device(udid)
|
||||
except Exception as e:
|
||||
# 单设备异常不能干掉整个循环
|
||||
LogManager.warning(f"[Add] 处理设备 {udid} 异常: {e}", udid=udid)
|
||||
print(f"[Add] 处理设备 {udid} 异常: {e}")
|
||||
|
||||
# 2. 处理可能离线的设备(只看本轮开始时 known 里的)
|
||||
for udid in list(known):
|
||||
if udid not in online:
|
||||
last = self._last_seen.get(udid, 0)
|
||||
@@ -106,17 +126,26 @@ class DeviceInfo:
|
||||
LogManager.method_error(f"移除失败:{e}", "listen", udid=udid)
|
||||
print(f"[Remove] 移除失败 {udid}: {e}")
|
||||
|
||||
# ---------- 3. 心跳:每 5 秒强制同步一次到 Flask ----------
|
||||
if now - last_broadcast > 5.0:
|
||||
try:
|
||||
self._manager_send()
|
||||
except Exception as e:
|
||||
print(f"[Listen] 周期同步到 Flask 失败: {e}")
|
||||
else:
|
||||
last_broadcast = now
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
# 判断设备是否信任
|
||||
def _is_trusted(self, udid: str) -> bool:
|
||||
try:
|
||||
d = tidevice.Device(udid)
|
||||
# 随便读一个需要 lockdown/配对的字段
|
||||
_ = d.product_version # 或 d.info,视你当前 tidevice 版本而定
|
||||
return True
|
||||
except Exception as e:
|
||||
msg = str(e)
|
||||
# 这里只是示意,你可以根据你本地真实报错关键字再精细一点
|
||||
if "NotTrusted" in msg or "Please trust" in msg or "InvalidHostID" in msg:
|
||||
print(f"[Trust] 设备未信任,udid={udid}, err={msg}")
|
||||
return False
|
||||
|
||||
# 如果是别的错误(比如瞬时通信异常),我倾向于当作“暂时不信任”,避免把有问题的设备加进去
|
||||
print(f"[Trust] 检测信任状态出错,当作未信任处理 udid={udid}, err={msg}")
|
||||
return False
|
||||
|
||||
# ==========================
|
||||
# 添加设备
|
||||
# ==========================
|
||||
|
||||
Reference in New Issue
Block a user