fix linux uni (url) and tray exit

This commit is contained in:
rustdesk
2023-06-10 18:24:03 +08:00
parent 9799758c96
commit 7fba1800ec
7 changed files with 52 additions and 44 deletions

View File

@@ -94,6 +94,13 @@ pub fn core_main() -> Option<Vec<String>> {
}
}
hbb_common::init_log(false, &log_name);
// linux uni (url) go here.
#[cfg(all(target_os = "linux", feature = "flutter"))]
if args.len() > 0 && args[0].starts_with("rustdesk:") {
return try_send_by_dbus(args[0].clone());
}
#[cfg(windows)]
if !crate::platform::is_installed()
&& args.is_empty()
@@ -343,20 +350,8 @@ fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option<Vec<Strin
);
#[cfg(target_os = "linux")]
{
use crate::dbus::invoke_new_connection;
return try_send_by_dbus(uni_links);
match invoke_new_connection(uni_links) {
Ok(()) => {
return None;
}
Err(err) => {
log::error!("{}", err.as_ref());
// return Some to invoke this new connection by self
return Some(Vec::new());
}
}
}
#[cfg(windows)]
{
use winapi::um::winuser::WM_USER;
@@ -378,3 +373,19 @@ fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option<Vec<Strin
};
}
}
#[cfg(all(target_os = "linux", feature = "flutter"))]
fn try_send_by_dbus(uni_links: String) -> Option<Vec<String>> {
use crate::dbus::invoke_new_connection;
match invoke_new_connection(uni_links) {
Ok(()) => {
return None;
}
Err(err) => {
log::error!("{}", err.as_ref());
// return Some to invoke this url by self
return Some(Vec::new());
}
}
}

View File

@@ -1145,7 +1145,7 @@ pub fn uninstall_service(show_new_window: bool) -> bool {
if show_new_window {
run_me_with(2);
}
true
std::process::exit(0);
}
pub fn install_service() -> bool {

View File

@@ -2171,7 +2171,7 @@ pub fn uninstall_service(show_new_window: bool) -> bool {
return true;
}
run_after_run_cmds(!show_new_window);
true
std::process::exit(0);
}
pub fn install_service() -> bool {

View File

@@ -36,6 +36,7 @@ impl Error for DbusError {}
/// - use dbus-send command:
/// `dbus-send --session --print-reply --dest=org.rustdesk.rustdesk /dbus org.rustdesk.rustdesk.NewConnection string:'PEER_ID'`
pub fn invoke_new_connection(uni_links: String) -> Result<(), Box<dyn Error>> {
log::info!("Starting dbus service for uni");
let conn = Connection::new_session()?;
let proxy = conn.with_proxy(DBUS_NAME, DBUS_PREFIX, DBUS_TIMEOUT);
let (ret,): (String,) =
@@ -73,8 +74,8 @@ fn handle_client_message(builder: &mut IfaceBuilder<()>) {
{
use crate::flutter;
let data = HashMap::from([
("name", "new_connection"),
("uni_links", _uni_links.as_str()),
("name", "on_url_scheme_received"),
("url", _uni_links.as_str()),
]);
let event = serde_json::ser::to_string(&data).unwrap_or("".to_string());
match crate::flutter::push_global_event(flutter::APP_TYPE_MAIN, event) {

View File

@@ -74,9 +74,14 @@ pub fn make_tray() -> hbb_common::ResultType<()> {
.spawn()
.ok();
}
// xdg-open?
#[cfg(target_os = "linux")]
crate::run_me::<&str>(vec![]).ok();
if !std::process::Command::new("xdg-open")
.arg("rustdesk://")
.spawn()
.is_ok()
{
crate::run_me::<&str>(vec![]).ok();
}
};
event_loop.run(move |_event, _, control_flow| {
@@ -92,7 +97,6 @@ pub fn make_tray() -> hbb_common::ResultType<()> {
if let Ok(event) = menu_channel.try_recv() {
if event.id == quit_i.id() {
crate::platform::uninstall_service(false);
*control_flow = ControlFlow::Exit;
} else if event.id == open_i.id() {
open_func();
}