mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
remove many unwrap and enum_value_or_default
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
@@ -64,11 +64,10 @@ impl AppHandler for Rc<Host> {
|
||||
|
||||
// https://github.com/xi-editor/druid/blob/master/druid-shell/src/platform/mac/application.rs
|
||||
pub unsafe fn set_delegate(handler: Option<Box<dyn AppHandler>>) {
|
||||
let decl = ClassDecl::new("AppDelegate", class!(NSObject));
|
||||
if decl.is_none() {
|
||||
let Some(mut decl) = ClassDecl::new("AppDelegate", class!(NSObject)) else {
|
||||
log::error!("Failed to new AppDelegate");
|
||||
return;
|
||||
}
|
||||
let mut decl = decl.unwrap();
|
||||
};
|
||||
decl.add_ivar::<*mut c_void>(APP_HANDLER_IVAR);
|
||||
|
||||
decl.add_method(
|
||||
@@ -116,7 +115,10 @@ pub unsafe fn set_delegate(handler: Option<Box<dyn AppHandler>>) {
|
||||
let handler_ptr = Box::into_raw(Box::new(state));
|
||||
(*delegate).set_ivar(APP_HANDLER_IVAR, handler_ptr as *mut c_void);
|
||||
// Set the url scheme handler
|
||||
let cls = Class::get("NSAppleEventManager").unwrap();
|
||||
let Some(cls) = Class::get("NSAppleEventManager") else {
|
||||
log::error!("Failed to get NSAppleEventManager");
|
||||
return;
|
||||
};
|
||||
let manager: *mut Object = msg_send![cls, sharedAppleEventManager];
|
||||
let _: () = msg_send![manager,
|
||||
setEventHandler: delegate
|
||||
@@ -199,10 +201,10 @@ fn service_should_handle_reopen(
|
||||
_sel: Sel,
|
||||
_sender: id,
|
||||
_has_visible_windows: BOOL,
|
||||
) -> BOOL {
|
||||
) -> BOOL {
|
||||
log::debug!("Invoking the main rustdesk process");
|
||||
std::thread::spawn(move || crate::handle_url_scheme("".to_string()));
|
||||
// Prevent default logic.
|
||||
std::thread::spawn(move || crate::handle_url_scheme("".to_string()));
|
||||
// Prevent default logic.
|
||||
NO
|
||||
}
|
||||
|
||||
|
||||
@@ -728,7 +728,9 @@ pub fn get_double_click_time() -> u32 {
|
||||
// g_object_get (settings, "gtk-double-click-time", &double_click_time, NULL);
|
||||
unsafe {
|
||||
let mut double_click_time = 0u32;
|
||||
let property = std::ffi::CString::new("gtk-double-click-time").unwrap();
|
||||
let Ok(property) = std::ffi::CString::new("gtk-double-click-time") else {
|
||||
return 0;
|
||||
};
|
||||
let settings = gtk_settings_get_default();
|
||||
g_object_get(
|
||||
settings,
|
||||
@@ -801,7 +803,10 @@ pub fn resolutions(name: &str) -> Vec<Resolution> {
|
||||
if let Some(resolutions) = caps.name("resolutions") {
|
||||
let resolution_pat =
|
||||
r"\s*(?P<width>\d+)x(?P<height>\d+)\s+(?P<rates>(\d+\.\d+\D*)+)\s*\n";
|
||||
let resolution_re = Regex::new(&format!(r"{}", resolution_pat)).unwrap();
|
||||
let Ok(resolution_re) = Regex::new(&format!(r"{}", resolution_pat)) else {
|
||||
log::error!("Regex new failed");
|
||||
return vec![];
|
||||
};
|
||||
for resolution_caps in resolution_re.captures_iter(resolutions.as_str()) {
|
||||
if let Some((width, height)) =
|
||||
get_width_height_from_captures(&resolution_caps)
|
||||
|
||||
@@ -74,7 +74,7 @@ pub fn is_can_input_monitoring(prompt: bool) -> bool {
|
||||
// remove just one app from all the permissions: tccutil reset All com.carriez.rustdesk
|
||||
pub fn is_can_screen_recording(prompt: bool) -> bool {
|
||||
// we got some report that we show no permission even after set it, so we try to use new api for screen recording check
|
||||
// the new api is only available on macOS >= 10.15, but on stackoverflow, some people said it works on >= 10.16 (crash on 10.15),
|
||||
// the new api is only available on macOS >= 10.15, but on stackoverflow, some people said it works on >= 10.16 (crash on 10.15),
|
||||
// but also some said it has bug on 10.16, so we just use it on 11.0.
|
||||
unsafe {
|
||||
if CanUseNewApiForScreenCaptureCheck() == YES {
|
||||
@@ -146,14 +146,26 @@ pub fn is_installed_daemon(prompt: bool) -> bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
let install_script = PRIVILEGES_SCRIPTS_DIR.get_file("install.scpt").unwrap();
|
||||
let install_script_body = install_script.contents_utf8().unwrap();
|
||||
let Some(install_script) = PRIVILEGES_SCRIPTS_DIR.get_file("install.scpt") else {
|
||||
return false;
|
||||
};
|
||||
let Some(install_script_body) = install_script.contents_utf8() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
let daemon_plist = PRIVILEGES_SCRIPTS_DIR.get_file(&daemon).unwrap();
|
||||
let daemon_plist_body = daemon_plist.contents_utf8().unwrap();
|
||||
let Some(daemon_plist) = PRIVILEGES_SCRIPTS_DIR.get_file(&daemon) else {
|
||||
return false;
|
||||
};
|
||||
let Some(daemon_plist_body) = daemon_plist.contents_utf8() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
let agent_plist = PRIVILEGES_SCRIPTS_DIR.get_file(&agent).unwrap();
|
||||
let agent_plist_body = agent_plist.contents_utf8().unwrap();
|
||||
let Some(agent_plist) = PRIVILEGES_SCRIPTS_DIR.get_file(&agent) else {
|
||||
return false;
|
||||
};
|
||||
let Some(agent_plist_body) = agent_plist.contents_utf8() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
std::thread::spawn(move || {
|
||||
match std::process::Command::new("osascript")
|
||||
@@ -198,8 +210,12 @@ pub fn uninstall_service(show_new_window: bool) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
let script_file = PRIVILEGES_SCRIPTS_DIR.get_file("uninstall.scpt").unwrap();
|
||||
let script_body = script_file.contents_utf8().unwrap();
|
||||
let Some(script_file) = PRIVILEGES_SCRIPTS_DIR.get_file("uninstall.scpt") else {
|
||||
return false;
|
||||
};
|
||||
let Some(script_body) = script_file.contents_utf8() else {
|
||||
return false;
|
||||
};
|
||||
|
||||
std::thread::spawn(move || {
|
||||
match std::process::Command::new("osascript")
|
||||
|
||||
@@ -6,7 +6,9 @@ use crate::{
|
||||
privacy_win_mag::{self, WIN_MAG_INJECTED_PROCESS_EXE},
|
||||
};
|
||||
use hbb_common::{
|
||||
allow_err, bail,
|
||||
allow_err,
|
||||
anyhow::anyhow,
|
||||
bail,
|
||||
config::{self, Config},
|
||||
log,
|
||||
message_proto::Resolution,
|
||||
@@ -848,10 +850,9 @@ pub fn check_update_broker_process() -> ResultType<()> {
|
||||
let origin_process_exe = privacy_win_mag::ORIGIN_PROCESS_EXE;
|
||||
|
||||
let exe_file = std::env::current_exe()?;
|
||||
if exe_file.parent().is_none() {
|
||||
let Some(cur_dir) = exe_file.parent() else {
|
||||
bail!("Cannot get parent of current exe file");
|
||||
}
|
||||
let cur_dir = exe_file.parent().unwrap();
|
||||
};
|
||||
let cur_exe = cur_dir.join(process_exe);
|
||||
|
||||
if !std::path::Path::new(&cur_exe).exists() {
|
||||
@@ -902,29 +903,29 @@ fn get_install_info_with_subkey(subkey: String) -> (String, String, String, Stri
|
||||
(subkey, path, start_menu, exe)
|
||||
}
|
||||
|
||||
pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> String {
|
||||
pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> ResultType<String> {
|
||||
let main_raw = format!(
|
||||
"XCOPY \"{}\" \"{}\" /Y /E /H /C /I /K /R /Z",
|
||||
PathBuf::from(src_raw)
|
||||
.parent()
|
||||
.unwrap()
|
||||
.ok_or(anyhow!("Can't get parent directory of {src_raw}"))?
|
||||
.to_string_lossy()
|
||||
.to_string(),
|
||||
_path
|
||||
);
|
||||
return main_raw;
|
||||
return Ok(main_raw);
|
||||
}
|
||||
|
||||
pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> String {
|
||||
let main_exe = copy_raw_cmd(src_exe, exe, path);
|
||||
format!(
|
||||
pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> ResultType<String> {
|
||||
let main_exe = copy_raw_cmd(src_exe, exe, path)?;
|
||||
Ok(format!(
|
||||
"
|
||||
{main_exe}
|
||||
copy /Y \"{ORIGIN_PROCESS_EXE}\" \"{path}\\{broker_exe}\"
|
||||
",
|
||||
ORIGIN_PROCESS_EXE = privacy_win_mag::ORIGIN_PROCESS_EXE,
|
||||
broker_exe = privacy_win_mag::INJECTED_PROCESS_EXE,
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
fn get_after_install(exe: &str) -> String {
|
||||
@@ -1118,7 +1119,7 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{path}\\\"
|
||||
} else {
|
||||
&dels
|
||||
},
|
||||
copy_exe = copy_exe_cmd(&src_exe, &exe, &path),
|
||||
copy_exe = copy_exe_cmd(&src_exe, &exe, &path)?,
|
||||
import_config = get_import_config(&exe),
|
||||
);
|
||||
run_cmds(cmds, debug, "install")?;
|
||||
@@ -1200,7 +1201,7 @@ fn write_cmds(cmds: String, ext: &str, tip: &str) -> ResultType<std::path::PathB
|
||||
tmp.push(format!("{}_{}.{}", crate::get_app_name(), tip, ext));
|
||||
let mut file = std::fs::File::create(&tmp)?;
|
||||
if ext == "bat" {
|
||||
let tmp2 = get_undone_file(&tmp);
|
||||
let tmp2 = get_undone_file(&tmp)?;
|
||||
std::fs::File::create(&tmp2).ok();
|
||||
cmds = format!(
|
||||
"
|
||||
@@ -1231,18 +1232,20 @@ fn to_le(v: &mut [u16]) -> &[u8] {
|
||||
unsafe { v.align_to().1 }
|
||||
}
|
||||
|
||||
fn get_undone_file(tmp: &PathBuf) -> PathBuf {
|
||||
fn get_undone_file(tmp: &PathBuf) -> ResultType<PathBuf> {
|
||||
let mut tmp1 = tmp.clone();
|
||||
tmp1.set_file_name(format!(
|
||||
"{}.undone",
|
||||
tmp.file_name().unwrap().to_string_lossy()
|
||||
tmp.file_name()
|
||||
.ok_or(anyhow!("Failed to get filename of {:?}", tmp))?
|
||||
.to_string_lossy()
|
||||
));
|
||||
tmp1
|
||||
Ok(tmp1)
|
||||
}
|
||||
|
||||
fn run_cmds(cmds: String, show: bool, tip: &str) -> ResultType<()> {
|
||||
let tmp = write_cmds(cmds, "bat", tip)?;
|
||||
let tmp2 = get_undone_file(&tmp);
|
||||
let tmp2 = get_undone_file(&tmp)?;
|
||||
let tmp_fn = tmp.to_str().unwrap_or("");
|
||||
let res = runas::Command::new("cmd")
|
||||
.args(&["/C", &tmp_fn])
|
||||
|
||||
Reference in New Issue
Block a user