refactor: use async instead of block_on

This commit is contained in:
MystiPanda
2024-06-29 19:02:37 +08:00
parent c1a201f358
commit 1293d25e1b
11 changed files with 81 additions and 74 deletions

View File

@@ -34,7 +34,7 @@ pub fn find_unused_port() -> Result<u16> {
}
/// handle something when start app
pub fn resolve_setup(app: &mut App) {
pub async fn resolve_setup(app: &mut App) {
#[cfg(target_os = "macos")]
app.set_activation_policy(tauri::ActivationPolicy::Accessory);
let version = app.package_info().version.to_string();
@@ -73,7 +73,8 @@ pub fn resolve_setup(app: &mut App) {
// 启动核心
log::trace!("init config");
log_err!(Config::init_config());
log_err!(Config::init_config().await);
log::trace!("launch core");
log_err!(CoreManager::global().init());
@@ -101,9 +102,7 @@ pub fn resolve_setup(app: &mut App) {
if argvs.len() > 1 {
let param = argvs[1].as_str();
if param.starts_with("clash:") {
tauri::async_runtime::block_on(async {
resolve_scheme(argvs[1].to_owned()).await;
});
resolve_scheme(argvs[1].to_owned()).await;
}
}
}
@@ -111,8 +110,10 @@ pub fn resolve_setup(app: &mut App) {
/// reset system proxy
pub fn resolve_reset() {
log_err!(sysopt::Sysopt::global().reset_sysproxy());
log_err!(CoreManager::global().stop_core());
let _ = service::unset_dns_by_service();
tauri::async_runtime::block_on(async move {
log_err!(CoreManager::global().stop_core().await);
log_err!(service::unset_dns_by_service().await);
});
}
/// create main window

View File

@@ -14,40 +14,38 @@ struct QueryParam {
}
/// check whether there is already exists
pub fn check_singleton() -> Result<()> {
pub async fn check_singleton() -> Result<()> {
let port = IVerge::get_singleton_port();
if !local_port_available(port) {
tauri::async_runtime::block_on(async {
let resp = reqwest::get(format!("http://127.0.0.1:{port}/commands/ping"))
.await?
.text()
.await?;
let resp = reqwest::get(format!("http://127.0.0.1:{port}/commands/ping"))
.await?
.text()
.await?;
if &resp == "ok" {
let argvs: Vec<String> = std::env::args().collect();
if argvs.len() > 1 {
let param = argvs[1].as_str();
if param.starts_with("clash:") {
reqwest::get(format!(
"http://127.0.0.1:{port}/commands/scheme?param={param}"
))
.await?
.text()
.await?;
}
} else {
reqwest::get(format!("http://127.0.0.1:{port}/commands/visible"))
.await?
.text()
.await?;
if &resp == "ok" {
let argvs: Vec<String> = std::env::args().collect();
if argvs.len() > 1 {
let param = argvs[1].as_str();
if param.starts_with("clash:") {
reqwest::get(format!(
"http://127.0.0.1:{port}/commands/scheme?param={param}"
))
.await?
.text()
.await?;
}
bail!("app exists");
} else {
reqwest::get(format!("http://127.0.0.1:{port}/commands/visible"))
.await?
.text()
.await?;
}
bail!("app exists");
}
log::error!("failed to setup singleton listen server");
Ok(())
})
log::error!("failed to setup singleton listen server");
Ok(())
} else {
Ok(())
}