diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index 7c57b76cb34c44c0b401d6b396bf88b777824a22..001c83e370ebd75ac9d7c759982f2add63f5b4dc 100644 --- a/src-tauri/src/cmds.rs +++ b/src-tauri/src/cmds.rs @@ -107,13 +107,23 @@ pub fn select_profile( } } -/// todo: need to check /// delete profile item #[tauri::command] -pub fn delete_profile(index: usize, profiles: State<'_, ProfilesState>) -> Result<(), String> { - match profiles.0.lock() { - Ok(mut profiles) => profiles.delete_item(index), - Err(_) => Err("can not get profiles lock".into()), +pub fn delete_profile( + index: usize, + clash_state: State<'_, ClashState>, + profiles_state: State<'_, ProfilesState>, +) -> Result<(), String> { + let mut profiles = profiles_state.0.lock().unwrap(); + match profiles.delete_item(index) { + Ok(change) => match change { + true => { + let clash = clash_state.0.lock().unwrap(); + profiles.activate(clash.info.clone()) + } + false => Ok(()), + }, + Err(err) => Err(err), } } diff --git a/src-tauri/src/core/profiles.rs b/src-tauri/src/core/profiles.rs index a493d2fa06a7908219e326dd3510bcc76cdbccfc..42ee3f4f93d7c36884bba5b36a95a61f2bddef75 100644 --- a/src-tauri/src/core/profiles.rs +++ b/src-tauri/src/core/profiles.rs @@ -195,7 +195,7 @@ impl ProfilesConfig { } /// delete the item - pub fn delete_item(&mut self, index: usize) -> Result<(), String> { + pub fn delete_item(&mut self, index: usize) -> Result<bool, String> { let mut current = self.current.clone().unwrap_or(0); let mut items = self.items.clone().unwrap_or(vec![]); @@ -205,13 +205,22 @@ impl ProfilesConfig { items.remove(index); + let mut should_change = false; + if current == index { current = 0; + should_change = true; } else if current > index { current = current - 1; } + self.current = Some(current); - self.save_file() + self.items = Some(items); + + match self.save_file() { + Ok(_) => Ok(should_change), + Err(err) => Err(err), + } } /// activate current profile