Sfoglia il codice sorgente

fix: user agent not works

GyDi 3 anni fa
parent
commit
cf00c9476f
3 ha cambiato i file con 38 aggiunte e 7 eliminazioni
  1. 11 3
      src-tauri/src/cmds.rs
  2. 26 3
      src-tauri/src/core/profiles.rs
  3. 1 1
      src-tauri/src/utils/help.rs

+ 11 - 3
src-tauri/src/cmds.rs

@@ -59,19 +59,27 @@ pub async fn update_profile(
   clash_state: State<'_, ClashState>,
   profiles_state: State<'_, ProfilesState>,
 ) -> Result<(), String> {
-  let url = {
+  let (url, opt) = {
     // must release the lock here
     let profiles = profiles_state.0.lock().unwrap();
     let item = wrap_err!(profiles.get_item(&index))?;
 
+    // check the profile type
+    if let Some(typ) = item.itype.as_ref() {
+      if *typ != "remote" {
+        ret_err!(format!("could not update the `{typ}` profile"));
+      }
+    }
+
     if item.url.is_none() {
       ret_err!("failed to get the item url");
     }
 
-    item.url.clone().unwrap()
+    (item.url.clone().unwrap(), item.option.clone())
   };
 
-  let item = wrap_err!(PrfItem::from_url(&url, None, None, option).await)?;
+  let fetch_opt = PrfOption::merge(opt, option);
+  let item = wrap_err!(PrfItem::from_url(&url, None, None, fetch_opt).await)?;
 
   let mut profiles = profiles_state.0.lock().unwrap();
   wrap_err!(profiles.update_item(index.clone(), item))?;

+ 26 - 3
src-tauri/src/core/profiles.rs

@@ -73,6 +73,31 @@ pub struct PrfOption {
   pub with_proxy: Option<bool>,
 }
 
+impl PrfOption {
+  pub fn merge(one: Option<Self>, other: Option<Self>) -> Option<Self> {
+    if one.is_some() && other.is_some() {
+      let mut one = one.unwrap();
+      let other = other.unwrap();
+
+      if let Some(val) = other.user_agent {
+        one.user_agent = Some(val);
+      }
+
+      if let Some(val) = other.with_proxy {
+        one.with_proxy = Some(val);
+      }
+
+      return Some(one);
+    }
+
+    if one.is_none() {
+      return other;
+    }
+
+    return one;
+  }
+}
+
 impl Default for PrfItem {
   fn default() -> Self {
     PrfItem {
@@ -414,9 +439,7 @@ impl Profiles {
         patch!(each, item, selected);
         patch!(each, item, extra);
         patch!(each, item, updated);
-
-        // can be removed
-        each.option = item.option;
+        patch!(each, item, option);
 
         self.items = Some(items);
         return self.save_file();

+ 1 - 1
src-tauri/src/utils/help.rs

@@ -68,7 +68,7 @@ macro_rules! wrap_err {
 /// return the string literal error
 #[macro_export]
 macro_rules! ret_err {
-  ($str: literal) => {
+  ($str: expr) => {
     return Err($str.into())
   };
 }