Files
browser/platform_web/components/RuntimeDLLExtensionsPanel.tsx

76 lines
3.5 KiB
TypeScript

import type { GamePluginRuntimeProfilesResponse, RuntimeDLLExtensionProfileResponse } from "../api/types";
interface RuntimeDLLExtensionsPanelProps {
runtimeProfiles?: GamePluginRuntimeProfilesResponse;
embedded?: boolean;
}
export function RuntimeDLLExtensionsPanel({ runtimeProfiles, embedded = false }: RuntimeDLLExtensionsPanelProps) {
const extensions = runtimeProfiles?.dllExtensions ?? [];
if (extensions.length === 0) {
return null;
}
const content = <RuntimeDLLExtensionsContent extensions={extensions} />;
return embedded ? <section className="console-module" aria-label="UE4SS DLL extensions">{content}</section> : <article className="console-panel" aria-label="UE4SS DLL extensions">{content}</article>;
}
function RuntimeDLLExtensionsContent({ extensions }: { extensions: RuntimeDLLExtensionProfileResponse[] }) {
return (
<>
<div className="panel-header">
<h2>UE4SS DLL 扩展</h2>
<span className="page-status">声明式、固定版本、启动前同步</span>
</div>
<p className="page-status">Run 不直接执行 DLL;已安装的 UE4SS 会在目标服务端正常启动时加载它。</p>
<div className="console-record-list">
{extensions.map((extension) => (
<article key={extension.key} className="console-record">
<div className="console-record-head">
<strong>{extension.displayName}</strong>
<span className={extension.releaseState === "ready" ? "status-pill status-active" : "status-pill status-disabled"}>{extension.releaseState === "ready" ? "已固定发布" : "待发布"}</span>
</div>
<div className="console-record-meta">
<span>{extension.key}</span>
<span>版本 {extension.version}</span>
</div>
<dl className="detail-list">
<div>
<dt>下载声明</dt>
<dd>{releaseLocation(extension)}</dd>
</div>
<div>
<dt>DLL 校验</dt>
<dd>{extension.checksum || "待发布后固定"}</dd>
</div>
<div>
<dt>目标可执行文件兼容</dt>
<dd>{extension.targetExecutableChecksum || "待发布后固定"}</dd>
</div>
<div>
<dt>UE4SS ABI</dt>
<dd>{extension.ue4ssAbi || "待发布后固定"}</dd>
</div>
</dl>
<div className="tag-list" aria-label={`${extension.displayName} activation policy`}>
<span>启动前自动校验和更新</span>
<span>运行:目标服务端受监管启动</span>
<span> UE4SS 正常加载</span>
<span>{supportedTargets(extension)}</span>
<span>Linux 启动前拒绝</span>
</div>
{extension.releaseState === "unpublished" && <p className="page-status">发布者尚未提供完整哈希、大小与兼容性固定值;此声明可查看,但不会派发给 Run</p>}
</article>
))}
</div>
</>
);
}
function releaseLocation(extension: RuntimeDLLExtensionProfileResponse): string {
return [extension.releaseHost, extension.releaseFilename].filter((value): value is string => Boolean(value)).join(" / ") || "待发布";
}
function supportedTargets(extension: RuntimeDLLExtensionProfileResponse): string {
return extension.supportedTargets.map((target) => `${target.os} ${target.arch}`).join(", ") || "Windows amd64";
}