mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 17:15:38 +08:00
refactor: update request method handling to use reqwest::Method enum
fix: duplicated checks tray menu
This commit is contained in:
@@ -5,7 +5,6 @@ use crate::{
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value;
|
|
||||||
|
|
||||||
/// ### `verge.yaml` schema
|
/// ### `verge.yaml` schema
|
||||||
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use reqwest::header::HeaderMap;
|
use reqwest::{Method, header::HeaderMap};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::{
|
use std::{
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
@@ -45,7 +45,7 @@ impl MihomoManager {
|
|||||||
|
|
||||||
async fn send_request(
|
async fn send_request(
|
||||||
&self,
|
&self,
|
||||||
method: &str,
|
method: Method,
|
||||||
url: String,
|
url: String,
|
||||||
data: Option<serde_json::Value>,
|
data: Option<serde_json::Value>,
|
||||||
) -> Result<serde_json::Value, String> {
|
) -> Result<serde_json::Value, String> {
|
||||||
@@ -55,40 +55,43 @@ impl MihomoManager {
|
|||||||
.timeout(Duration::from_secs(60))
|
.timeout(Duration::from_secs(60))
|
||||||
.build()
|
.build()
|
||||||
.map_err(|e| e.to_string())?
|
.map_err(|e| e.to_string())?
|
||||||
.request(
|
.request(method.clone(), &url)
|
||||||
match method {
|
|
||||||
"GET" => reqwest::Method::GET,
|
|
||||||
"PUT" => reqwest::Method::PUT,
|
|
||||||
"POST" => reqwest::Method::POST,
|
|
||||||
"PATCH" => reqwest::Method::PATCH,
|
|
||||||
_ => reqwest::Method::GET,
|
|
||||||
},
|
|
||||||
&url,
|
|
||||||
)
|
|
||||||
.json(&data.unwrap_or(json!({})))
|
.json(&data.unwrap_or(json!({})))
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
.map_err(|e| e.to_string())?;
|
.map_err(|e| e.to_string())?;
|
||||||
|
|
||||||
let response = if method != "PUT" {
|
let response = match method {
|
||||||
client_response.json::<serde_json::Value>().await
|
Method::PATCH => {
|
||||||
} else {
|
let status = client_response.status();
|
||||||
client_response.text().await.map(|text| json!(text))
|
if status.as_u16() == 204 {
|
||||||
}
|
json!({"code": 204})
|
||||||
.map_err(|e| e.to_string())?;
|
} else {
|
||||||
|
client_response
|
||||||
|
.json::<serde_json::Value>()
|
||||||
|
.await
|
||||||
|
.map_err(|e| e.to_string())?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Method::PUT => json!(client_response.text().await.map_err(|e| e.to_string())?),
|
||||||
|
_ => client_response
|
||||||
|
.json::<serde_json::Value>()
|
||||||
|
.await
|
||||||
|
.map_err(|e| e.to_string())?,
|
||||||
|
};
|
||||||
Ok(response)
|
Ok(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn refresh_proxies(&self) -> Result<&Self, String> {
|
pub async fn refresh_proxies(&self) -> Result<&Self, String> {
|
||||||
let url = format!("{}/proxies", self.mihomo_server);
|
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);
|
self.update_proxies(proxies);
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn refresh_providers_proxies(&self) -> Result<&Self, String> {
|
pub async fn refresh_providers_proxies(&self) -> Result<&Self, String> {
|
||||||
let url = format!("{}/providers/proxies", self.mihomo_server);
|
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);
|
self.update_providers_proxies(providers_proxies);
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
@@ -100,13 +103,13 @@ impl MihomoManager {
|
|||||||
let payload = serde_json::json!({
|
let payload = serde_json::json!({
|
||||||
"path": clash_config_path,
|
"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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn patch_configs(&self, config: serde_json::Value) -> Result<(), String> {
|
pub async fn patch_configs(&self, config: serde_json::Value) -> Result<(), String> {
|
||||||
let url = format!("{}/configs", self.mihomo_server);
|
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 {
|
if response["code"] == 204 {
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
@@ -128,7 +131,7 @@ impl MihomoManager {
|
|||||||
"{}/proxies/{}/delay?url={}&timeout={}",
|
"{}/proxies/{}/delay?url={}&timeout={}",
|
||||||
self.mihomo_server, name, test_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)
|
Ok(response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ pub fn change_clash_mode(mode: String) {
|
|||||||
log_err!(tray::Tray::global().update_icon(None));
|
log_err!(tray::Tray::global().update_icon(None));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(err) => log::error!(target: "app", "{err}"),
|
Err(err) => println!("{err}"),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user