From a4c1573c45ea99482f9a978cf2535c3e84c042a8 Mon Sep 17 00:00:00 2001 From: GyDi <segydi@foxmail.com> Date: Sat, 8 Jan 2022 14:21:12 +0800 Subject: [PATCH] fix: delete profile item command --- src-tauri/src/cmds.rs | 20 +++++++++++++++----- src-tauri/src/core/profiles.rs | 13 +++++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs index 7c57b76..001c83e 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 a493d2f..42ee3f4 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 -- GitLab