mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-29 09:37:37 +08:00
fix(profiles): stop proxy server when profile switch leaves no takeovers active
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//! 项目 Profile 管理命令
|
||||
|
||||
use serde::Serialize;
|
||||
use tauri::{Emitter, State};
|
||||
use tauri::{Emitter, Manager, State};
|
||||
|
||||
use crate::database::Profile;
|
||||
use crate::services::profile::{ProfilePayload, ProfileScope, ProfileService};
|
||||
@@ -165,7 +165,31 @@ pub fn apply_profile(
|
||||
scope: String,
|
||||
) -> Result<Vec<String>, String> {
|
||||
let scope = ProfileScope::parse(&scope).map_err(|e| e.to_string())?;
|
||||
let warnings = ProfileService::apply(&state, &id, scope).map_err(|e| e.to_string())?;
|
||||
emit_profile_apply_events(&app, &state, &id, scope);
|
||||
let (warnings, should_stop_proxy) =
|
||||
ProfileService::apply(&state, &id, scope).map_err(|e| e.to_string())?;
|
||||
|
||||
if should_stop_proxy {
|
||||
// sync 命令线程没有 Tokio runtime,无法直接 await stop();
|
||||
// 把停止服务放到 Tauri async runtime,停止后再补发事件刷新 UI。
|
||||
let app_handle = app.clone();
|
||||
let profile_id = id.clone();
|
||||
let proxy_service = state.proxy_service.clone();
|
||||
tauri::async_runtime::spawn(async move {
|
||||
if let Err(e) = proxy_service.stop().await {
|
||||
log::warn!("切换项目后停止代理服务失败: {e}");
|
||||
}
|
||||
if let Some(app_state) = app_handle.try_state::<AppState>() {
|
||||
emit_profile_apply_events(
|
||||
&app_handle,
|
||||
app_state.inner(),
|
||||
&profile_id,
|
||||
scope,
|
||||
);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
emit_profile_apply_events(&app, &state, &id, scope);
|
||||
}
|
||||
|
||||
Ok(warnings)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user