'use client'; import Link from 'next/link'; import { useEffect, useEffectEvent, useState } from 'react'; import { ExternalLink, RefreshCw } from 'lucide-react'; import { SettingsSection } from './SettingsSection'; import type { AppReleaseEntry, AppUpdateResponse } from '@/lib/types/app-update'; const DEFAULT_SOURCE = { repository: 'KuekHaoYang/KVideo', branch: 'main', manifestUrl: 'https://raw.githubusercontent.com/KuekHaoYang/KVideo/main/app-release.json', changelogUrl: 'https://github.com/KuekHaoYang/KVideo/blob/main/CHANGELOG.md', repositoryUrl: 'https://github.com/KuekHaoYang/KVideo', }; function formatDateLabel(value?: string) { if (!value) { return '未记录'; } const parsed = new Date(value); if (Number.isNaN(parsed.getTime())) { return value; } return new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', }).format(parsed); } function getStatusMeta(data: AppUpdateResponse | null) { switch (data?.status) { case 'update-available': return { label: '发现新版本', tone: 'text-amber-500 border-amber-500/30 bg-amber-500/10', description: `GitHub 最新版本为 ${data.latestVersion},当前实例仍是 ${data.currentVersion}。`, }; case 'ahead-of-remote': return { label: '本地版本较新', tone: 'text-sky-500 border-sky-500/30 bg-sky-500/10', description: `当前实例版本 ${data.currentVersion} 新于 GitHub 检查结果 ${data.latestVersion}。`, }; case 'check-failed': return { label: '检查失败', tone: 'text-red-500 border-red-500/30 bg-red-500/10', description: data.error || '远程版本检查失败,当前仅显示本地版本信息。', }; case 'up-to-date': default: return { label: '已是最新版本', tone: 'text-emerald-500 border-emerald-500/30 bg-emerald-500/10', description: data ? `当前实例版本 ${data.currentVersion} 与 GitHub 最新版本一致。` : '正在获取最新版本信息。', }; } } function ReleaseNotesBlock({ title, release, emptyText, }: { title: string; release: AppReleaseEntry | null; emptyText: string; }) { return (
{release.version} · {release.title} · {release.publishedAt}
) : ({emptyText}
)}当前版本
{data?.currentVersion || '加载中...'}
{currentRelease ? `${currentRelease.title} · ${currentRelease.publishedAt}` : '正在读取本地版本说明'}
{statusMeta.description}
上次检查:{hasLoaded ? formatDateLabel(data?.checkedAt) : '正在检查'}