diff --git a/src/core_main.rs b/src/core_main.rs index 6d2b0598a..caac2ca99 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -31,12 +31,6 @@ fn is_empty_uni_link(arg: &str) -> bool { arg[prefix.len()..].chars().all(|c| c == '/') } -#[inline] -fn is_valid_non_empty_uni_link(arg: &str) -> bool { - let prefix = crate::get_uri_prefix(); - arg.starts_with(&prefix) && arg[prefix.len()..].chars().any(|c| c != '/') -} - /// shared by flutter and sciter main function /// /// [Note] @@ -70,9 +64,8 @@ pub fn core_main() -> Option> { .contains(&arg.as_str()) { _is_flutter_invoke_new_connection = true; - } else if i == 1 && is_valid_non_empty_uni_link(&arg) { - return handle_uni_links(arg); - } else if arg == "--elevate" { + } + if arg == "--elevate" { _is_elevate = true; } else if arg == "--run-as-system" { _is_run_as_system = true; @@ -111,7 +104,7 @@ pub fn core_main() -> Option> { } #[cfg(feature = "flutter")] if _is_flutter_invoke_new_connection { - return handle_uni_links(cmd_to_uni_link(std::env::args())); + return core_main_invoke_new_connection(std::env::args()); } let click_setup = cfg!(windows) && args.is_empty() && crate::common::is_setup(&arg_exe); if click_setup && !config::is_disable_installation() { @@ -518,8 +511,14 @@ fn import_config(path: &str) { } } +/// invoke a new connection +/// +/// [Note] +/// this is for invoke new connection from dbus. +/// If it returns [`None`], then the process will terminate, and flutter gui will not be started. +/// If it returns [`Some`], then the process will continue, and flutter gui will be started. #[cfg(feature = "flutter")] -fn cmd_to_uni_link(mut args: std::env::Args) -> String { +fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option> { let mut authority = None; let mut id = None; let mut param_array = vec![]; @@ -566,17 +565,6 @@ fn cmd_to_uni_link(mut args: std::env::Args) -> String { ); } } - return uni_links; -} - -/// invoke a new connection -/// -/// [Note] -/// this is for invoke new connection. -/// If it returns [`None`], then the process will terminate, and flutter gui will not be started. -/// If it returns [`Some`], then the process will continue, and flutter gui will be started. -#[cfg(feature = "flutter")] -fn handle_uni_links(uni_links: String) -> Option> { if uni_links.is_empty() { return None; } @@ -598,9 +586,7 @@ fn handle_uni_links(uni_links: String) -> Option> { } #[cfg(target_os = "macos")] { - return if let Err(_) = crate::ipc::send_url_scheme(uni_links.clone()) { - let res = crate::platform::send_url_to_system(&uni_links); // if exit, can't invoke this url successfully - println!("open_url result: {res:?}"); + return if let Err(_) = crate::ipc::send_url_scheme(uni_links) { Some(Vec::new()) } else { None diff --git a/src/flutter.rs b/src/flutter.rs index 6861f4d9d..af150c3f5 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -93,9 +93,14 @@ pub extern "C" fn handle_applicationShouldOpenUntitledFile() { #[no_mangle] pub extern "C" fn rustdesk_core_main_args(args_len: *mut c_int) -> *mut *mut c_char { unsafe { std::ptr::write(args_len, 0) }; - if let Some(args) = crate::core_main::core_main() { - return rust_args_to_c_args(args, args_len); + #[cfg(not(any(target_os = "android", target_os = "ios")))] + { + if let Some(args) = crate::core_main::core_main() { + return rust_args_to_c_args(args, args_len); + } + return std::ptr::null_mut() as _; } + #[cfg(any(target_os = "android", target_os = "ios"))] return std::ptr::null_mut() as _; } diff --git a/src/platform/macos.rs b/src/platform/macos.rs index be4fbbeee..1ae35e56b 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -19,7 +19,7 @@ use core_graphics::{ }; use hbb_common::{anyhow::anyhow, bail, log, message_proto::Resolution}; use include_dir::{include_dir, Dir}; -use objc::{class, msg_send, runtime::Object, sel, sel_impl}; +use objc::{class, msg_send, sel, sel_impl}; use scrap::{libc::c_void, quartz::ffi::*}; use std::path::PathBuf; @@ -762,21 +762,3 @@ impl WakeLock { .ok_or(anyhow!("no AwakeHandle"))? } } - -pub fn send_url_to_system(uni_links: &str) -> Result<(), &'static str> { - unsafe { - let ns_string = NSString::alloc(nil); - let url_str = ns_string.init_str(uni_links); - let url: *mut Object = msg_send![class!(NSURL), URLWithString: url_str]; - if url.is_null() { - return Err("Failed to create NSURL"); - } - let workspace: *mut Object = msg_send![class!(NSWorkspace), sharedWorkspace]; - let success: bool = msg_send![workspace, openURL: url]; - if success { - Ok(()) - } else { - Err("Failed to open URL") - } - } -}