From 2c485b5efbdeb029c10c8f0166628e0ac42ab13c Mon Sep 17 00:00:00 2001 From: coolcoala Date: Sun, 3 Aug 2025 12:50:16 +0300 Subject: [PATCH] fixed an issue with opening a window via a shortcut when the application is already active --- src-tauri/src/lib.rs | 36 ++++++++--------------------------- src-tauri/src/utils/server.rs | 29 +--------------------------- 2 files changed, 9 insertions(+), 56 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 92a37273..626606ed 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -10,7 +10,7 @@ mod utils; use crate::{ core::hotkey, process::AsyncHandler, - utils::{resolve, resolve::resolve_scheme, server}, + utils::{resolve, resolve::resolve_scheme}, }; use config::Config; use std::sync::{Mutex, Once}; @@ -90,33 +90,6 @@ pub fn run() { let _ = utils::dirs::init_portable_flag(); - // 异步单例检测 - AsyncHandler::spawn(move || async move { - logging!(info, Type::Setup, true, "开始检查单例实例..."); - match timeout(Duration::from_secs(3), server::check_singleton()).await { - Ok(result) => { - if result.is_err() { - logging!(info, Type::Setup, true, "检测到已有应用实例运行"); - if let Some(app_handle) = AppHandleManager::global().get() { - app_handle.exit(0); - } else { - std::process::exit(0); - } - } else { - logging!(info, Type::Setup, true, "未检测到其他应用实例"); - } - } - Err(_) => { - logging!( - warn, - Type::Setup, - true, - "单例检查超时,假定没有其他实例运行" - ); - } - } - }); - #[cfg(target_os = "linux")] std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); @@ -125,6 +98,13 @@ pub fn run() { #[allow(unused_mut)] let mut builder = tauri::Builder::default() + .plugin(tauri_plugin_single_instance::init(|app, _argv, _cwd| { + if let Some(window) = app.get_webview_window("main") { + let _ = window.show(); + let _ = window.unminimize(); + let _ = window.set_focus(); + } + })) .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_clipboard_manager::init()) diff --git a/src-tauri/src/utils/server.rs b/src-tauri/src/utils/server.rs index 6c8b3503..ab061e5a 100644 --- a/src-tauri/src/utils/server.rs +++ b/src-tauri/src/utils/server.rs @@ -7,8 +7,7 @@ use crate::{ process::AsyncHandler, utils::logging::Type, }; -use anyhow::{bail, Result}; -use port_scanner::local_port_available; +use anyhow::Result; use std::convert::Infallible; use warp::Filter; @@ -17,32 +16,6 @@ struct QueryParam { param: String, } -/// check whether there is already exists -pub async fn check_singleton() -> Result<()> { - let port = IVerge::get_singleton_port(); - if !local_port_available(port) { - let argvs: Vec = std::env::args().collect(); - if argvs.len() > 1 { - #[cfg(not(target_os = "macos"))] - { - let param = argvs[1].as_str(); - if param.starts_with("clash:") { - let _ = reqwest::get(format!( - "http://127.0.0.1:{port}/commands/scheme?param={param}" - )) - .await; - } - } - } else { - let _ = reqwest::get(format!("http://127.0.0.1:{port}/commands/visible")).await; - } - log::error!("failed to setup singleton listen server"); - bail!("app exists"); - } else { - Ok(()) - } -} - /// The embed server only be used to implement singleton process /// maybe it can be used as pac server later pub fn embed_server() {