From 7740d611b612ca259e5d5d67b5c41c6bb2a6e116 Mon Sep 17 00:00:00 2001 From: zhx Date: Tue, 9 Jun 2026 15:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=B8=B8=E6=88=8Fsha256?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/games/hooks/useGamesPage.js | 108 +--------------------- src/features/games/pages/GameListPage.jsx | 32 +------ tsconfig.json | 2 +- 3 files changed, 8 insertions(+), 134 deletions(-) diff --git a/src/features/games/hooks/useGamesPage.js b/src/features/games/hooks/useGamesPage.js index a9700f1..4eb4277 100644 --- a/src/features/games/hooks/useGamesPage.js +++ b/src/features/games/hooks/useGamesPage.js @@ -51,12 +51,6 @@ const defaultPlatformForm = { const defaultBridgeScriptForm = { bridgeScriptUrl: "", bridgeScriptVersion: "", - bridgeScriptSha256: "", -}; - -const defaultBridgeHashState = { - loading: false, - error: "", }; const emptyCatalog = { items: [], pageSize: 50 }; @@ -81,7 +75,6 @@ export function useGamesPage() { const [gameForm, setGameForm] = useState(defaultGameForm); const [platformForm, setPlatformForm] = useState(defaultPlatformForm); const [bridgeScriptForm, setBridgeScriptForm] = useState(defaultBridgeScriptForm); - const [bridgeHashState, setBridgeHashState] = useState(defaultBridgeHashState); const [loadingAction, setLoadingAction] = useState(""); const [syncPlatform, setSyncPlatform] = useState(null); const [syncCandidates, setSyncCandidates] = useState([]); @@ -217,7 +210,6 @@ export function useGamesPage() { const openBridgeScript = () => { setBridgeScriptForm(bridgeScriptFormFromPlatforms(platformData.items || [])); - setBridgeHashState(defaultBridgeHashState); setActiveAction("bridge-script"); }; @@ -235,78 +227,12 @@ export function useGamesPage() { } if (activeAction === "bridge-script") { setBridgeScriptForm(defaultBridgeScriptForm); - setBridgeHashState(defaultBridgeHashState); } setActiveAction(""); setEditingGameId(""); setEditingPlatformCode(""); }; - const refreshBridgeScriptHash = useCallback(async () => { - const url = bridgeScriptForm.bridgeScriptUrl.trim(); - if (activeAction !== "bridge-script" || url === "") { - return ""; - } - setBridgeHashState({ loading: true, error: "" }); - try { - const hash = await calculateBridgeScriptSha256(url); - setBridgeScriptForm((current) => { - if (current.bridgeScriptUrl.trim() !== url) { - return current; - } - return { ...current, bridgeScriptSha256: hash }; - }); - setBridgeHashState(defaultBridgeHashState); - return hash; - } catch (err) { - const message = err.message || "生成 SHA256 失败"; - setBridgeHashState({ loading: false, error: message }); - showToast(message, "error"); - return ""; - } - }, [activeAction, bridgeScriptForm.bridgeScriptUrl, showToast]); - - useEffect(() => { - if (activeAction !== "bridge-script") { - return undefined; - } - const url = bridgeScriptForm.bridgeScriptUrl.trim(); - const version = bridgeScriptForm.bridgeScriptVersion.trim(); - if (!url || !version) { - setBridgeScriptForm((current) => - current.bridgeScriptSha256 ? { ...current, bridgeScriptSha256: "" } : current, - ); - setBridgeHashState(defaultBridgeHashState); - return undefined; - } - let cancelled = false; - const timer = window.setTimeout(async () => { - setBridgeHashState({ loading: true, error: "" }); - try { - const hash = await calculateBridgeScriptSha256(url); - if (cancelled) { - return; - } - setBridgeScriptForm((current) => { - if (current.bridgeScriptUrl.trim() !== url || current.bridgeScriptVersion.trim() !== version) { - return current; - } - return { ...current, bridgeScriptSha256: hash }; - }); - setBridgeHashState(defaultBridgeHashState); - } catch (err) { - if (cancelled) { - return; - } - setBridgeHashState({ loading: false, error: err.message || "生成 SHA256 失败" }); - } - }, 500); - return () => { - cancelled = true; - window.clearTimeout(timer); - }; - }, [activeAction, bridgeScriptForm.bridgeScriptUrl, bridgeScriptForm.bridgeScriptVersion]); - const submitGame = async (event) => { event.preventDefault(); const payload = gamePayload(gameForm); @@ -361,13 +287,6 @@ export function useGamesPage() { showToast("请填写 bridge_script_url 和 bridge_script_version", "error"); return; } - let bridgeScriptSha256 = bridgeScriptForm.bridgeScriptSha256.trim(); - if (!bridgeScriptSha256) { - bridgeScriptSha256 = await refreshBridgeScriptHash(); - } - if (!bridgeScriptSha256) { - return; - } setLoadingAction("bridge-script"); try { await Promise.all( @@ -375,10 +294,13 @@ export function useGamesPage() { const config = parseJsonObject(platform.adapterConfigJson); config.bridge_script_url = bridgeScriptUrl; config.bridge_script_version = bridgeScriptVersion; - config.bridge_script_sha256 = bridgeScriptSha256; delete config.bridgeScriptUrl; delete config.bridgeScriptVersion; + delete config.bridge_script_sha256; delete config.bridgeScriptSha256; + delete config.bridge_script_hash; + delete config.script_sha256; + delete config.scriptSha256; return upsertGamePlatform( platformUpsertPayload(platform, JSON.stringify(config, null, 2)), platform.platformCode, @@ -518,7 +440,6 @@ export function useGamesPage() { abilities, activeAction, allSyncGamesSelected, - bridgeHashState, bridgeScriptForm, changeGameStatus, deleteGame, @@ -550,7 +471,6 @@ export function useGamesPage() { platformForm, platformOptions, loadNextPage, - refreshBridgeScriptHash, reload: reloadCatalog, resetFilters, resolveGameURL, @@ -592,16 +512,13 @@ function bridgeScriptFormFromPlatform(platform) { return { bridgeScriptUrl: readConfigString(config.bridge_script_url ?? config.bridgeScriptUrl), bridgeScriptVersion: readConfigString(config.bridge_script_version ?? config.bridgeScriptVersion), - bridgeScriptSha256: readConfigString( - config.bridge_script_sha256 ?? config.bridgeScriptSha256 ?? config.bridge_script_hash, - ), }; } function bridgeScriptFormFromPlatforms(platforms) { for (const platform of platforms) { const form = bridgeScriptFormFromPlatform(platform); - if (form.bridgeScriptUrl || form.bridgeScriptVersion || form.bridgeScriptSha256) { + if (form.bridgeScriptUrl || form.bridgeScriptVersion) { return form; } } @@ -629,21 +546,6 @@ function platformUpsertPayload(platform, adapterConfigJson) { }; } -async function calculateBridgeScriptSha256(url) { - if (!window.crypto?.subtle) { - throw new Error("当前浏览器不支持 SHA256 计算"); - } - const response = await fetch(url, { cache: "no-store" }); - if (!response.ok) { - throw new Error(`拉取 JS 失败:HTTP ${response.status}`); - } - const buffer = await response.arrayBuffer(); - const digest = await window.crypto.subtle.digest("SHA-256", buffer); - return Array.from(new Uint8Array(digest)) - .map((byte) => byte.toString(16).padStart(2, "0")) - .join(""); -} - async function saveGameUrl(platforms, game, gameUrl) { const platform = platforms.find((item) => item.platformCode === game.platformCode); if (!platform) { diff --git a/src/features/games/pages/GameListPage.jsx b/src/features/games/pages/GameListPage.jsx index bc25848..0c30eae 100644 --- a/src/features/games/pages/GameListPage.jsx +++ b/src/features/games/pages/GameListPage.jsx @@ -435,15 +435,8 @@ function GameFormDialog({ form, loading, mode, open, page, onClose, onSubmit }) } function BridgeScriptDialog({ form, loading, open, page, onClose, onSubmit }) { - const hashState = page.bridgeHashState || {}; const disabled = !page.abilities.canUpdate; - const submitDisabled = - disabled || - loading || - hashState.loading || - !form.bridgeScriptUrl.trim() || - !form.bridgeScriptVersion.trim() || - !form.bridgeScriptSha256.trim(); + const submitDisabled = disabled || loading || !form.bridgeScriptUrl.trim() || !form.bridgeScriptVersion.trim(); return ( - - {hashState.loading ? "生成中..." : "重新生成 SHA256"} - - } - > + page.setBridgeScriptForm({ ...form, bridgeScriptUrl: event.target.value })} /> - - page.setBridgeScriptForm({ ...form, bridgeScriptSha256: event.target.value }) - } - /> diff --git a/tsconfig.json b/tsconfig.json index 7716b94..b54f920 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,7 @@ "module": "ESNext", "moduleResolution": "Bundler", "noEmit": true, - "ignoreDeprecations": "6.0", + "ignoreDeprecations": "5.0", "resolveJsonModule": true, "skipLibCheck": true, "strict": true,