This commit is contained in:
eric
2026-03-29 01:54:10 -05:00
parent 784a4468b8
commit c3ee09674f
13 changed files with 4347 additions and 70 deletions

View File

@@ -1,7 +1,7 @@
"use client";
import { Copy, ExternalLink, Layers, Loader2, Package, RefreshCw, Terminal } from "lucide-react";
import { useCallback, useEffect, useState } from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
type DeviceRow = { serial: string; model?: string; state: string };
type TFn = (zh: string, en: string) => string;
@@ -95,6 +95,18 @@ export function LiveAndroidWorkstation({
const lock = !!(busy || pending);
const hostMirrorSrc = useMemo(() => {
if (!scrcpyUrl) return "";
try {
const u = new URL(scrcpyUrl);
u.searchParams.set("_lh", String(mirrorReloadKey));
return u.toString();
} catch {
const sep = scrcpyUrl.includes("?") ? "&" : "?";
return `${scrcpyUrl}${sep}_lh=${mirrorReloadKey}`;
}
}, [scrcpyUrl, mirrorReloadKey]);
const loadOverview = useCallback(async () => {
if (!androidSerial || !adbAvailable) {
setOverview(null);
@@ -340,8 +352,8 @@ export function LiveAndroidWorkstation({
<div className="space-y-2 border-b border-white/5 px-4 py-3">
<p className="text-[11px] leading-relaxed text-zinc-400">
{t(
"板载 USB投屏协议来自开源 scrcpy见上方仓库链接浏览器内常用 ws-scrcpy。黑屏时先 Wake再点「重载投屏」或新窗口打开面板。",
"Board USB: scrcpy protocol; browser uses ws-scrcpy. Black screen: Wake, reload mirror, or open panel in new tab.",
"板载 ws-scrcpy 同时只允许一个浏览器会话:多标签/总览与安卓页各嵌一个 iframe 会互相抢连接。请只保留一个投屏页,或反复点「重载投屏」。已打补丁的安装会踢掉旧连接以便嵌入。黑屏请先 Wake会连发唤醒+滑动+Home。",
"Only one ws-scrcpy browser session: multiple embedded iframes fight for the stream—keep one tab or use Reload. Patched installs replace the old session. Black screen: try Wake (wake+swipe+home), then Reload or New tab.",
)}
</p>
<div className="flex flex-wrap items-center gap-2">
@@ -381,9 +393,11 @@ export function LiveAndroidWorkstation({
<iframe
key={`ws-scrcpy-${mirrorReloadKey}`}
title="ws-scrcpy"
src={scrcpyUrl}
src={hostMirrorSrc}
className="h-[min(72vh,640px)] w-full bg-black"
allow="fullscreen; autoplay; clipboard-read; clipboard-write"
referrerPolicy="no-referrer-when-downgrade"
loading="eager"
/>
) : (
<p className="px-4 py-8 text-center text-sm text-zinc-500">{t("未配置 ws-scrcpy 地址", "ws-scrcpy URL missing")}</p>