Эх сурвалжийг харах

fix: delete profile item command

GyDi 3 жил өмнө
parent
commit
a4c1573c45

+ 15 - 5
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),
   }
 }
 

+ 11 - 2
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