import { useState, useEffect } from "react"; import { X, RefreshCw, FolderOpen, Download, ExternalLink } from "lucide-react"; import { getVersion } from "@tauri-apps/api/app"; import "../lib/tauri-api"; import { relaunchApp } from "../lib/updater"; import { useUpdate } from "../contexts/UpdateContext"; import type { Settings } from "../types"; interface SettingsModalProps { onClose: () => void; } export default function SettingsModal({ onClose }: SettingsModalProps) { const [settings, setSettings] = useState({ showInDock: true, }); const [configPath, setConfigPath] = useState(""); const [version, setVersion] = useState(""); const [isCheckingUpdate, setIsCheckingUpdate] = useState(false); const [isDownloading, setIsDownloading] = useState(false); const { hasUpdate, updateInfo, updateHandle, checkUpdate, resetDismiss } = useUpdate(); useEffect(() => { loadSettings(); loadConfigPath(); loadVersion(); }, []); const loadVersion = async () => { try { const appVersion = await getVersion(); setVersion(appVersion); } catch (error) { console.error("获取版本信息失败:", error); // 失败时不硬编码版本号,显示为未知 setVersion("未知"); } }; const loadSettings = async () => { try { const loadedSettings = await window.api.getSettings(); if (loadedSettings?.showInDock !== undefined) { setSettings({ showInDock: loadedSettings.showInDock }); } } catch (error) { console.error("加载设置失败:", error); } }; const loadConfigPath = async () => { try { const path = await window.api.getAppConfigPath(); if (path) { setConfigPath(path); } } catch (error) { console.error("获取配置路径失败:", error); } }; const saveSettings = async () => { try { await window.api.saveSettings(settings); onClose(); } catch (error) { console.error("保存设置失败:", error); } }; const handleCheckUpdate = async () => { if (hasUpdate && updateHandle) { // 已检测到更新:直接复用 updateHandle 下载并安装,避免重复检查 setIsDownloading(true); try { resetDismiss(); await updateHandle.downloadAndInstall(); await relaunchApp(); } catch (error) { console.error("更新失败:", error); // 更新失败时回退到打开 Releases 页面 await window.api.checkForUpdates(); } finally { setIsDownloading(false); } } else { // 尚未检测到更新:先检查 setIsCheckingUpdate(true); try { await checkUpdate(); // 检查后若有更新,让用户再次点击执行 } catch (error) { console.error("检查更新失败,回退到 Releases 页面:", error); await window.api.checkForUpdates(); } finally { setIsCheckingUpdate(false); } } }; const handleOpenConfigFolder = async () => { try { await window.api.openAppConfigFolder(); } catch (error) { console.error("打开配置文件夹失败:", error); } }; const handleOpenReleaseNotes = async () => { try { const targetVersion = updateInfo?.availableVersion || version; // 如果未知或为空,回退到 releases 首页 if (!targetVersion || targetVersion === "未知") { await window.api.openExternal("https://github.com/farion1231/cc-switch/releases"); return; } const tag = targetVersion.startsWith("v") ? targetVersion : `v${targetVersion}`; await window.api.openExternal( `https://github.com/farion1231/cc-switch/releases/tag/${tag}`, ); } catch (error) { console.error("打开更新日志失败:", error); } }; return (
{/* 标题栏 */}

设置

{/* 设置内容 */}
{/* 显示设置 - 功能还未实现 */} {/*

显示设置

*/} {/* 配置文件位置 */}

配置文件位置

{configPath || "加载中..."}
{/* 关于 */}

关于

CC Switch

版本 {version}

{/* 底部按钮 */}
); }