From 00d6bcc00ff48699e2377f53fd4935f699a09528 Mon Sep 17 00:00:00 2001 From: Tunglies Date: Sat, 15 Mar 2025 13:23:17 +0800 Subject: [PATCH] refactor: update request method handling to use reqwest::Method enum fix: duplicated checks tray menu --- src-tauri/src/config/verge.rs | 1 - src-tauri/src/crate_mihomo_api/src/lib.rs | 49 ++++++++++++----------- src-tauri/src/feat/clash.rs | 2 +- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs index f29362c2..d3d6b1c5 100644 --- a/src-tauri/src/config/verge.rs +++ b/src-tauri/src/config/verge.rs @@ -5,7 +5,6 @@ use crate::{ use anyhow::Result; use log::LevelFilter; use serde::{Deserialize, Serialize}; -use serde_json::Value; /// ### `verge.yaml` schema #[derive(Default, Debug, Clone, Deserialize, Serialize)] diff --git a/src-tauri/src/crate_mihomo_api/src/lib.rs b/src-tauri/src/crate_mihomo_api/src/lib.rs index 7b9d6304..50820844 100644 --- a/src-tauri/src/crate_mihomo_api/src/lib.rs +++ b/src-tauri/src/crate_mihomo_api/src/lib.rs @@ -1,4 +1,4 @@ -use reqwest::header::HeaderMap; +use reqwest::{Method, header::HeaderMap}; use serde_json::json; use std::{ sync::{Arc, Mutex}, @@ -45,7 +45,7 @@ impl MihomoManager { async fn send_request( &self, - method: &str, + method: Method, url: String, data: Option, ) -> Result { @@ -55,40 +55,43 @@ impl MihomoManager { .timeout(Duration::from_secs(60)) .build() .map_err(|e| e.to_string())? - .request( - match method { - "GET" => reqwest::Method::GET, - "PUT" => reqwest::Method::PUT, - "POST" => reqwest::Method::POST, - "PATCH" => reqwest::Method::PATCH, - _ => reqwest::Method::GET, - }, - &url, - ) + .request(method.clone(), &url) .json(&data.unwrap_or(json!({}))) .send() .await .map_err(|e| e.to_string())?; - let response = if method != "PUT" { - client_response.json::().await - } else { - client_response.text().await.map(|text| json!(text)) - } - .map_err(|e| e.to_string())?; + let response = match method { + Method::PATCH => { + let status = client_response.status(); + if status.as_u16() == 204 { + json!({"code": 204}) + } else { + client_response + .json::() + .await + .map_err(|e| e.to_string())? + } + } + Method::PUT => json!(client_response.text().await.map_err(|e| e.to_string())?), + _ => client_response + .json::() + .await + .map_err(|e| e.to_string())?, + }; Ok(response) } pub async fn refresh_proxies(&self) -> Result<&Self, String> { let url = format!("{}/proxies", self.mihomo_server); - let proxies = self.send_request("GET", url, None).await?; + let proxies = self.send_request(Method::GET, url, None).await?; self.update_proxies(proxies); Ok(self) } pub async fn refresh_providers_proxies(&self) -> Result<&Self, String> { let url = format!("{}/providers/proxies", self.mihomo_server); - let providers_proxies = self.send_request("GET", url, None).await?; + let providers_proxies = self.send_request(Method::GET, url, None).await?; self.update_providers_proxies(providers_proxies); Ok(self) } @@ -100,13 +103,13 @@ impl MihomoManager { let payload = serde_json::json!({ "path": clash_config_path, }); - let _response = self.send_request("PUT", url, Some(payload)).await?; + let _response = self.send_request(Method::PUT, url, Some(payload)).await?; Ok(()) } pub async fn patch_configs(&self, config: serde_json::Value) -> Result<(), String> { let url = format!("{}/configs", self.mihomo_server); - let response = self.send_request("PATCH", url, Some(config)).await?; + let response = self.send_request(Method::PATCH, url, Some(config)).await?; if response["code"] == 204 { Ok(()) } else { @@ -128,7 +131,7 @@ impl MihomoManager { "{}/proxies/{}/delay?url={}&timeout={}", self.mihomo_server, name, test_url, timeout ); - let response = self.send_request("GET", url, None).await?; + let response = self.send_request(Method::GET, url, None).await?; Ok(response) } } diff --git a/src-tauri/src/feat/clash.rs b/src-tauri/src/feat/clash.rs index a43dee67..40a31276 100644 --- a/src-tauri/src/feat/clash.rs +++ b/src-tauri/src/feat/clash.rs @@ -59,7 +59,7 @@ pub fn change_clash_mode(mode: String) { log_err!(tray::Tray::global().update_icon(None)); } } - Err(err) => log::error!(target: "app", "{err}"), + Err(err) => println!("{err}"), } }); }