diff --git a/src-tauri/src/utils/server.rs b/src-tauri/src/utils/server.rs index 1d2ff59..f4e9836 100644 --- a/src-tauri/src/utils/server.rs +++ b/src-tauri/src/utils/server.rs @@ -2,19 +2,26 @@ extern crate warp; use super::resolve; use crate::config::IVerge; +use anyhow::{bail, Result}; use port_scanner::local_port_available; use tauri::AppHandle; use warp::Filter; /// check whether there is already exists -pub fn check_singleton() -> Result<(), ()> { +pub fn check_singleton() -> Result<()> { let port = IVerge::get_singleton_port(); if !local_port_available(port) { tauri::async_runtime::block_on(async { - let url = format!("http://127.0.0.1:{}/commands/visible", port); - reqwest::get(url).await.unwrap(); - Err(()) + let url = format!("http://127.0.0.1:{port}/commands/visible"); + let resp = reqwest::get(url).await?.text().await?; + + if &resp == "ok" { + bail!("app exists"); + } + + log::error!("failed to setup singleton listen server"); + Ok(()) }) } else { Ok(()) @@ -24,7 +31,6 @@ pub fn check_singleton() -> Result<(), ()> { /// The embed server only be used to implement singleton process /// maybe it can be used as pac server later pub fn embed_server(app_handle: AppHandle) { - let app_handle = app_handle.clone(); let port = IVerge::get_singleton_port(); tauri::async_runtime::spawn(async move {