fixed an issue with opening a window via a shortcut when the application is already active
This commit is contained in:
@@ -10,7 +10,7 @@ mod utils;
|
|||||||
use crate::{
|
use crate::{
|
||||||
core::hotkey,
|
core::hotkey,
|
||||||
process::AsyncHandler,
|
process::AsyncHandler,
|
||||||
utils::{resolve, resolve::resolve_scheme, server},
|
utils::{resolve, resolve::resolve_scheme},
|
||||||
};
|
};
|
||||||
use config::Config;
|
use config::Config;
|
||||||
use std::sync::{Mutex, Once};
|
use std::sync::{Mutex, Once};
|
||||||
@@ -90,33 +90,6 @@ pub fn run() {
|
|||||||
|
|
||||||
let _ = utils::dirs::init_portable_flag();
|
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")]
|
#[cfg(target_os = "linux")]
|
||||||
std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
|
std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
|
||||||
|
|
||||||
@@ -125,6 +98,13 @@ pub fn run() {
|
|||||||
|
|
||||||
#[allow(unused_mut)]
|
#[allow(unused_mut)]
|
||||||
let mut builder = tauri::Builder::default()
|
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_notification::init())
|
||||||
.plugin(tauri_plugin_updater::Builder::new().build())
|
.plugin(tauri_plugin_updater::Builder::new().build())
|
||||||
.plugin(tauri_plugin_clipboard_manager::init())
|
.plugin(tauri_plugin_clipboard_manager::init())
|
||||||
|
|||||||
@@ -7,8 +7,7 @@ use crate::{
|
|||||||
process::AsyncHandler,
|
process::AsyncHandler,
|
||||||
utils::logging::Type,
|
utils::logging::Type,
|
||||||
};
|
};
|
||||||
use anyhow::{bail, Result};
|
use anyhow::Result;
|
||||||
use port_scanner::local_port_available;
|
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use warp::Filter;
|
use warp::Filter;
|
||||||
|
|
||||||
@@ -17,32 +16,6 @@ struct QueryParam {
|
|||||||
param: String,
|
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<String> = 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
|
/// The embed server only be used to implement singleton process
|
||||||
/// maybe it can be used as pac server later
|
/// maybe it can be used as pac server later
|
||||||
pub fn embed_server() {
|
pub fn embed_server() {
|
||||||
|
|||||||
Reference in New Issue
Block a user