feat: 大屏增强——一键亮屏按钮、卡片显示设备名+IP+熄屏状态(thumb 响应头 X-Screen-State)、点击卡片进入设备操作弹窗(实时流+触控+按键+文字),工具页远程看屏子分栏移除并入大屏
This commit is contained in:
+20
-1
@@ -1042,6 +1042,7 @@ def api_screen_thumb():
|
||||
|
||||
一次性请求(非流),与任务并发安全(与任务截图同走 u2 minicap)。
|
||||
大屏按需轮询:每设备约 2.5s 一帧,20 台 ≈ 0.2 核 CPU + 100KB/s。
|
||||
响应头 X-Screen-State: on/off/unknown —— 大屏据此显示「亮屏中/熄屏中」。
|
||||
"""
|
||||
serial = request.args.get("serial", "")
|
||||
if not serial:
|
||||
@@ -1059,10 +1060,28 @@ def api_screen_thumb():
|
||||
buf = io.BytesIO()
|
||||
img.convert("RGB").save(buf, "JPEG", quality=55)
|
||||
return Response(buf.getvalue(), mimetype="image/jpeg",
|
||||
headers={"Cache-Control": "no-store"})
|
||||
headers={"Cache-Control": "no-store",
|
||||
"X-Screen-State": _device_screen_state(serial)})
|
||||
except Exception as e:
|
||||
return jsonify({"ok": False, "error": str(e)}), 503
|
||||
|
||||
|
||||
def _device_screen_state(serial):
|
||||
"""设备屏幕状态:on/off/unknown(dumpsys display 只读查询)。
|
||||
|
||||
USB 设备(远程 adb server)查询失败返回 unknown,不影响缩略图。
|
||||
"""
|
||||
try:
|
||||
if ":" not in serial:
|
||||
return "unknown"
|
||||
out = _adb("-s", serial, "shell", "dumpsys", "display") or ""
|
||||
m = re.search(r"m(?:Global)?ScreenState=(\w+)", out)
|
||||
if m:
|
||||
return "on" if m.group(1).upper() == "ON" else "off"
|
||||
except Exception:
|
||||
pass
|
||||
return "unknown"
|
||||
|
||||
@app.route("/api/screen/tap", methods=["POST"])
|
||||
@perm_required(PERM_DEVICES)
|
||||
def api_screen_tap():
|
||||
|
||||
Reference in New Issue
Block a user