From f736951fc845e0e9edbace2a6af92f34af6a797a Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Fri, 17 Dec 2021 00:35:46 +0800
Subject: [PATCH] feat: put profile works

---
 src-tauri/src/cmd.rs | 30 +++++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/src-tauri/src/cmd.rs b/src-tauri/src/cmd.rs
index d7c3475..87feab9 100644
--- a/src-tauri/src/cmd.rs
+++ b/src-tauri/src/cmd.rs
@@ -4,7 +4,11 @@ use crate::{
     emit::ClashInfoPayload,
     state::{ClashInfoState, ProfileLock},
   },
-  utils::{app_home_dir, clash, fetch::fetch_profile},
+  utils::{
+    app_home_dir,
+    clash::{self, put_clash_profile},
+    fetch::fetch_profile,
+  },
 };
 use std::fs::File;
 use std::io::Write;
@@ -135,27 +139,35 @@ pub fn set_profiles(
 
 #[tauri::command]
 /// change to target profile
-pub fn put_profiles(current: usize, lock: State<'_, ProfileLock>) -> Result<(), String> {
+pub async fn put_profiles(
+  current: usize,
+  lock: State<'_, ProfileLock>,
+  clash_info: State<'_, ClashInfoState>,
+) -> Result<(), String> {
   match lock.0.lock() {
     Ok(_) => {}
     Err(_) => return Err(format!("can not get file locked")),
   };
 
-  let mut profiles = read_profiles();
+  let clash_info = match clash_info.0.lock() {
+    Ok(arc) => arc.clone(),
+    _ => return Err(format!("can not get clash info")),
+  };
 
+  let mut profiles = read_profiles();
   let items_len = match &profiles.items {
     Some(p) => p.len(),
     None => 0,
   };
 
   if current >= items_len {
-    Err(format!(
+    return Err(format!(
       "failed to change profile to the index `{}`",
       current
-    ))
-  } else {
-    profiles.current = Some(current as u32);
-    save_profiles(&profiles);
-    Ok(())
+    ));
   }
+
+  profiles.current = Some(current as u32);
+  save_profiles(&profiles);
+  put_clash_profile(&clash_info).await
 }
-- 
GitLab