mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 13:03:44 +08:00
feat(mihomo): refactor MihomoManager for global access and improve proxy retrieval (#2906)
This commit is contained in:
parent
c0f5c231ad
commit
817d68546e
@ -1,21 +1,16 @@
|
|||||||
use super::CmdResult;
|
use super::CmdResult;
|
||||||
use crate::core;
|
use crate::module::mihomo::MihomoManager;
|
||||||
use mihomo_api;
|
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn get_proxies() -> CmdResult<serde_json::Value> {
|
pub async fn get_proxies() -> CmdResult<serde_json::Value> {
|
||||||
let (mihomo_server, headers) = core::clash_api::clash_client_info().unwrap();
|
let mannager = MihomoManager::global();
|
||||||
let mihomo = mihomo_api::MihomoManager::new(mihomo_server, headers);
|
mannager.refresh_proxies().await.unwrap();
|
||||||
Ok(mihomo.refresh_proxies().await.unwrap().get_proxies())
|
Ok(mannager.get_proxies())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
pub async fn get_providers_proxies() -> CmdResult<serde_json::Value> {
|
pub async fn get_providers_proxies() -> CmdResult<serde_json::Value> {
|
||||||
let (mihomo_server, headers) = core::clash_api::clash_client_info().unwrap();
|
let mannager = MihomoManager::global();
|
||||||
let mihomo = mihomo_api::MihomoManager::new(mihomo_server, headers);
|
mannager.refresh_providers_proxies().await.unwrap();
|
||||||
Ok(mihomo
|
Ok(mannager.get_providers_proxies())
|
||||||
.refresh_providers_proxies()
|
|
||||||
.await
|
|
||||||
.unwrap()
|
|
||||||
.get_providers_proxies())
|
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,10 @@ impl MihomoManager {
|
|||||||
data.providers_proxies = providers_proxies;
|
data.providers_proxies = providers_proxies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_mihomo_server(&self) -> String {
|
||||||
|
self.mihomo_server.clone()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_proxies(&self) -> serde_json::Value {
|
pub fn get_proxies(&self) -> serde_json::Value {
|
||||||
let data = self.data.lock().unwrap();
|
let data = self.data.lock().unwrap();
|
||||||
data.proxies.clone()
|
data.proxies.clone()
|
||||||
|
33
src-tauri/src/module/mihomo.rs
Normal file
33
src-tauri/src/module/mihomo.rs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
use crate::core::clash_api;
|
||||||
|
use mihomo_api;
|
||||||
|
use once_cell::sync::{Lazy, OnceCell};
|
||||||
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
pub struct MihomoManager {
|
||||||
|
mihomo: Mutex<OnceCell<mihomo_api::MihomoManager>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MihomoManager {
|
||||||
|
fn __global() -> &'static MihomoManager {
|
||||||
|
static INSTANCE: Lazy<MihomoManager> = Lazy::new(|| MihomoManager {
|
||||||
|
mihomo: Mutex::new(OnceCell::new()),
|
||||||
|
});
|
||||||
|
&INSTANCE
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn global() -> mihomo_api::MihomoManager {
|
||||||
|
let instance = MihomoManager::__global();
|
||||||
|
let (current_server, headers) = clash_api::clash_client_info().unwrap();
|
||||||
|
|
||||||
|
let lock = instance.mihomo.lock().unwrap();
|
||||||
|
if let Some(mihomo) = lock.get() {
|
||||||
|
if mihomo.get_mihomo_server() == current_server {
|
||||||
|
return mihomo.clone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lock.set(mihomo_api::MihomoManager::new(current_server, headers))
|
||||||
|
.ok();
|
||||||
|
lock.get().unwrap().clone()
|
||||||
|
}
|
||||||
|
}
|
@ -1 +1,2 @@
|
|||||||
pub mod sysinfo;
|
pub mod sysinfo;
|
||||||
|
pub mod mihomo;
|
Loading…
x
Reference in New Issue
Block a user