'use client'; import {useEffect} from 'react'; import {ExternalLink, Loader2} from 'lucide-react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import {Badge} from '@/components/ui/badge'; import {Button} from '@/components/ui/button'; import {Card, CardContent, CardDescription, CardHeader, CardTitle} from '@/components/ui/card'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog'; import {Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle} from '@/components/ui/dialog'; import {useOpenFlareServerUpgrade} from '@/lib/hooks/use-openflare-server-upgrade'; import type {AppUpdateStatus} from '@/lib/services/admin/types'; import {formatDateTime} from '@/lib/utils'; import {formatRelativeTime} from '@/app/(main)/nodes/components/node-utils'; function getUpgradeBadge(update: AppUpdateStatus | null | undefined) { if (!update) { return { label: '未检查', variant: 'outline' as const }; } if (update.update_available) { return { label: '可升级', variant: 'secondary' as const }; } return { label: '最新', variant: 'default' as const }; } export function VersionUpgradeDialog({ open, onOpenChange, canUpgrade = true, }: { open: boolean; onOpenChange: (open: boolean) => void; canUpgrade?: boolean; }) { const { currentVersion, update, releaseErrorMessage, isInitialLoading, isChecking, isUpgrading, handleOpen, handleCheckRelease, handleUpgrade, } = useOpenFlareServerUpgrade({ open, canUpgrade }); useEffect(() => { if (open) { handleOpen(); } }, [open, handleOpen]); const upgradeBadge = getUpgradeBadge(update); const isBusy = isChecking || isUpgrading; return ( 服务端版本 检查上游 GitHub Release 并升级当前服务。升级开始后服务会短暂重启。
当前版本

{currentVersion}

{upgradeBadge.label}
最新版本

{update?.latest_version || '未检查'}

{canUpgrade ? ( ) : null}
{isInitialLoading ? (
加载版本信息...
) : null} {!isInitialLoading && releaseErrorMessage ? (
{releaseErrorMessage}
) : null} {!isInitialLoading && !releaseErrorMessage && !update ? (
尚未检查更新,点击「检查更新」后展示 GitHub Release 信息。
) : null} {update ? ( GitHub Release · {update.latest_version} {update.published_at ? `发布时间:${formatRelativeTime(update.published_at)} · ${formatDateTime(update.published_at)}` : '未提供发布时间'}
{update.update_available ? '发现新版本' : '已经是最新版本'} {update.prerelease ? ( Preview 发布 ) : ( 正式发布 )} {!update.can_upgrade ? ( 当前平台不支持自动升级 ) : null}
{update.release_notes || '暂无更新说明'}
{update.release_url ? ( 查看发布详情 ) : null} {canUpgrade ? (
升级到 {update.latest_version}? 服务将下载并校验 {update.asset_name},随后替换当前二进制并重启。请确保安装目录可写,且服务允许原地重启。 取消 确认升级
) : null} {!update.can_upgrade ? (

{update.current_version === 'dev' ? '开发构建没有可比较的 Release 版本,不能执行自动升级。' : update.update_available ? '当前平台暂不支持自动替换二进制,请从 Release 页面手动升级。' : '当前版本无需升级。'}

) : null}
) : null}
); }