From 63dc7fc4b4dc320db1ad0db0462173395bd3496c Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Tue, 6 Oct 2026 16:04:18 +0800 Subject: [PATCH] refactor(effects): use one execution order --- src-tauri/src/feat/effects.rs | 5 +++-- src-tauri/src/feat/executor.rs | 32 +++++++------------------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/src-tauri/src/feat/effects.rs b/src-tauri/src/feat/effects.rs index 93177df3b..e273bb8da 100644 --- a/src-tauri/src/feat/effects.rs +++ b/src-tauri/src/feat/effects.rs @@ -1,19 +1,20 @@ use crate::config::IVerge; use std::collections::BTreeSet; +/// Variant order defines execution dependency order. #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] pub(super) enum Effect { RestartCore, ClashConfig, Autostart, + Language, SystemProxy, - TrayIcon, Hotkey, TrayMenu, + TrayIcon, TrayTooltip, TrayClick, Lightweight, - Language, LogLevel, LogFile, } diff --git a/src-tauri/src/feat/executor.rs b/src-tauri/src/feat/executor.rs index c301a6975..375a1e227 100644 --- a/src-tauri/src/feat/executor.rs +++ b/src-tauri/src/feat/executor.rs @@ -20,22 +20,6 @@ pub(super) enum Patch<'a> { Clash(&'a Mapping), } -const EFFECT_ORDER: &[Effect] = &[ - Effect::RestartCore, - Effect::ClashConfig, - Effect::Autostart, - Effect::Language, - Effect::SystemProxy, - Effect::Hotkey, - Effect::TrayMenu, - Effect::TrayIcon, - Effect::TrayTooltip, - Effect::TrayClick, - Effect::Lightweight, - Effect::LogLevel, - Effect::LogFile, -]; - async fn ensure_restart(manager: &CoreManager) -> Result<()> { Config::generate().await?; let previous = manager.current_core_readiness_generation(); @@ -143,15 +127,13 @@ pub(super) async fn apply(config_write: &MutexGuard<'_, ()>, patch: Patch<'_>, e Patch::Clash(patch) => clash.edit_draft(|draft| draft.patch_config(patch)), } let result: Result<()> = async { - for &effect in EFFECT_ORDER { - if effects.contains(&effect) { - let result = Box::pin(ensure_effect(effect, verge_patch, manager, &update)).await; - if matches!(patch, Patch::Clash(_)) && matches!(effect, Effect::TrayMenu | Effect::TrayIcon) { - // Tray failures must not reject an applied Clash mode change. - logging_error!(Type::Tray, result); - } else { - result?; - } + for effect in effects.iter().copied() { + let result = Box::pin(ensure_effect(effect, verge_patch, manager, &update)).await; + if matches!(patch, Patch::Clash(_)) && matches!(effect, Effect::TrayMenu | Effect::TrayIcon) { + // Tray failures must not reject an applied Clash mode change. + logging_error!(Type::Tray, result); + } else { + result?; } } match patch {