diff --git a/src-tauri/src/core/sysopt.rs b/src-tauri/src/core/sysopt.rs index 25ce95b6..c6aca452 100644 --- a/src-tauri/src/core/sysopt.rs +++ b/src-tauri/src/core/sysopt.rs @@ -220,10 +220,28 @@ impl Sysopt { let enable = enable.unwrap_or(false); let app_handle = Handle::global().app_handle().unwrap(); let autostart_manager = app_handle.autolaunch(); - println!("enable: {}", enable); + + log::info!(target: "app", "Setting auto launch to: {}", enable); + match enable { - true => log_err!(autostart_manager.enable()), - false => log_err!(autostart_manager.disable()), + true => { + let result = autostart_manager.enable(); + if let Err(ref e) = result { + log::error!(target: "app", "Failed to enable auto launch: {}", e); + } else { + log::info!(target: "app", "Auto launch enabled successfully"); + } + log_err!(result) + }, + false => { + let result = autostart_manager.disable(); + if let Err(ref e) = result { + log::error!(target: "app", "Failed to disable auto launch: {}", e); + } else { + log::info!(target: "app", "Auto launch disabled successfully"); + } + log_err!(result) + }, }; Ok(()) @@ -233,7 +251,17 @@ impl Sysopt { pub fn get_launch_status(&self) -> Result { let app_handle = Handle::global().app_handle().unwrap(); let autostart_manager = app_handle.autolaunch(); - Ok(autostart_manager.is_enabled()?) + + match autostart_manager.is_enabled() { + Ok(status) => { + log::info!(target: "app", "Auto launch status: {}", status); + Ok(status) + }, + Err(e) => { + log::error!(target: "app", "Failed to get auto launch status: {}", e); + Err(anyhow::anyhow!("Failed to get auto launch status: {}", e)) + } + } } fn guard_proxy(&self) { diff --git a/src/components/setting/setting-system.tsx b/src/components/setting/setting-system.tsx index fdeffd56..3e0ce233 100644 --- a/src/components/setting/setting-system.tsx +++ b/src/components/setting/setting-system.tsx @@ -45,9 +45,10 @@ const SettingSystem = ({ onError }: Props) => { // 当实际自启动状态与配置不同步时更新配置 useEffect(() => { if (autoLaunchEnabled !== undefined && verge && verge.enable_auto_launch !== autoLaunchEnabled) { - patchVerge({ enable_auto_launch: autoLaunchEnabled }); + // 静默更新配置,不触发UI刷新 + mutateVerge({ ...verge, enable_auto_launch: autoLaunchEnabled }, false); } - }, [autoLaunchEnabled, verge]); + }, [autoLaunchEnabled]); // 是否以sidecar模式运行 const isSidecarMode = runningMode === "sidecar"; @@ -190,7 +191,20 @@ const SettingSystem = ({ onError }: Props) => { onCatch={onError} onFormat={onSwitchFormat} onChange={(e) => onChangeData({ enable_auto_launch: e })} - onGuard={(e) => patchVerge({ enable_auto_launch: e })} + onGuard={async (e) => { + try { + // 在应用更改之前先触发UI更新,让用户立即看到反馈 + onChangeData({ enable_auto_launch: e }); + await patchVerge({ enable_auto_launch: e }); + // 更新实际状态 + await mutate("getAutoLaunchStatus"); + return Promise.resolve(); + } catch (error) { + // 如果出错,恢复原始状态 + onChangeData({ enable_auto_launch: !e }); + return Promise.reject(error); + } + }} > diff --git a/src/services/cmds.ts b/src/services/cmds.ts index d2d64e2e..61618ae9 100644 --- a/src/services/cmds.ts +++ b/src/services/cmds.ts @@ -119,7 +119,13 @@ export async function getAutotemProxy() { } export async function getAutoLaunchStatus() { - return invoke("get_auto_launch_status"); + try { + return await invoke("get_auto_launch_status"); + } catch (error) { + console.error("获取自启动状态失败:", error); + // 出错时返回false作为默认值 + return false; + } } export async function changeClashCore(clashCore: string) {