import { disconnectLanguage, useFileConnections, } from "@/store/file-connection"; import { useProjectSourcesStore } from "@/store/sources-store"; import { isTauriEnv } from "@/lib/is-tauri"; import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip"; import { Button } from "../ui/button"; import { cn } from "@/lib/utils"; type Props = { projectId: string; }; export function HeaderConnectionIndicator({ projectId }: Props) { const isTauri = isTauriEnv(); if (isTauri) { return ; } return ; } /** Tauri 模式:展示目前链接的所有语言文件地址 */ function TauriConnectionIndicator() { const { languages, baseDir } = useProjectSourcesStore(); const hasAny = languages.length > 0; const allExist = languages.every((lang) => lang.exists); const missingCount = languages.filter((lang) => !lang.exists).length; // 状态颜色:全部存在=绿色,部分缺失=黄色,无文件=红色 const statusColor = !hasAny ? "bg-red-500" : allExist ? "bg-green-500" : "bg-yellow-500"; return ( {hasAny ? `已连接 ${languages.length}${missingCount > 0 ? ` (${missingCount} 缺失)` : ""}` : "未配置"} 连接状态 (Tauri) {languages.length === 0 ? ( 暂无语言文件配置。请通过项目设置配置语言源目录。 ) : ( {baseDir && ( 基础目录:{baseDir} )} {languages.map((lang) => ( {lang.language} {lang.path} {!lang.exists && ( 文件不存在 )} ))} Tauri 模式下文件自动连接,无需手动操作。 )} ); } /** 浏览器模式:使用 FileSystemFileHandle 管理连接 */ function BrowserConnectionIndicator({ projectId }: { projectId: string }) { const snap = useFileConnections(projectId); const list = Object.values(snap.connections); const hasAny = list.length > 0; return ( {hasAny ? `已连线 ${list.length}` : "未连线"} 连线状态 {list.length === 0 ? ( 暂无连线。通过"导入 JSON"选择文件后将建立连线。 ) : ( {list.map((c) => ( {c.language} {c.name} disconnectLanguage(projectId, c.language)} > 断开 ))} 注:出于隐私,浏览器不提供完整路径,仅显示文件名;刷新页面后连线不会自动恢复。 )} ); }