From 6af19262e8550595db903c3c6ce0d87f80e57c26 Mon Sep 17 00:00:00 2001 From: Kingtous Date: Sun, 14 May 2023 22:31:02 +0800 Subject: [PATCH 1/2] opt: uniform install process with flutter in sciter --- src/platform/windows.rs | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 8fe900d11..147d42502 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -903,7 +903,6 @@ fn get_install_info_with_subkey(subkey: String) -> (String, String, String, Stri } pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> String { - #[cfg(feature = "flutter")] let main_raw = format!( "XCOPY \"{}\" \"{}\" /Y /E /H /C /I /K /R /Z", PathBuf::from(src_raw) @@ -913,12 +912,6 @@ pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> String { .to_string(), _path ); - #[cfg(not(feature = "flutter"))] - let main_raw = format!( - "copy /Y \"{src_raw}\" \"{raw}\"", - src_raw = src_raw, - raw = _raw - ); return main_raw; } @@ -939,18 +932,6 @@ pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> String { pub fn update_me() -> ResultType<()> { let (_, path, _, exe, _dll) = get_install_info(); let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); - #[cfg(not(feature = "flutter"))] - let src_dll = std::env::current_exe()? - .parent() - .unwrap_or(&Path::new(&get_default_install_path())) - .join("sciter.dll") - .to_str() - .unwrap_or("") - .to_owned(); - #[cfg(feature = "flutter")] - let copy_dll = "".to_string(); - #[cfg(not(feature = "flutter"))] - let copy_dll = copy_raw_cmd(&src_dll, &_dll, &path); let cmds = format!( " chcp 65001 @@ -958,12 +939,10 @@ pub fn update_me() -> ResultType<()> { taskkill /F /IM {broker_exe} taskkill /F /IM {app_name}.exe /FI \"PID ne {cur_pid}\" {copy_exe} - {copy_dll} sc start {app_name} {lic} ", copy_exe = copy_exe_cmd(&src_exe, &exe, &path), - copy_dll = copy_dll, broker_exe = WIN_MAG_INJECTED_PROCESS_EXE, app_name = crate::get_app_name(), lic = register_licence(), @@ -1133,18 +1112,6 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} app_name = crate::get_app_name(), ); let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_string(); - #[cfg(not(feature = "flutter"))] - let src_dll = std::env::current_exe()? - .parent() - .unwrap_or(&Path::new(&get_default_install_path())) - .join("sciter.dll") - .to_str() - .unwrap_or("") - .to_owned(); - #[cfg(feature = "flutter")] - let copy_dll = "".to_string(); - #[cfg(not(feature = "flutter"))] - let copy_dll = copy_raw_cmd(&src_dll, &_dll, &path); let install_cert = if options.contains("driverCert") { format!("\"{}\" --install-cert \"RustDeskIddDriver.cer\"", src_exe) @@ -1158,7 +1125,6 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} chcp 65001 md \"{path}\" {copy_exe} -{copy_dll} reg add {subkey} /f reg add {subkey} /f /v DisplayIcon /t REG_SZ /d \"{exe}\" reg add {subkey} /f /v DisplayName /t REG_SZ /d \"{app_name}\" @@ -1218,7 +1184,6 @@ sc delete {app_name} &dels }, copy_exe = copy_exe_cmd(&src_exe, &exe, &path), - copy_dll = copy_dll ); run_cmds(cmds, debug, "install")?; std::thread::sleep(std::time::Duration::from_millis(2000)); From 56f1b75b52e1f76d92f60e5e89ad353e319861ce Mon Sep 17 00:00:00 2001 From: Kingtous Date: Mon, 15 May 2023 00:18:40 +0800 Subject: [PATCH 2/2] fix: port forward & RDP check --- .../lib/desktop/pages/port_forward_page.dart | 5 ++++- flutter/lib/models/model.dart | 2 ++ src/flutter.rs | 18 +++++++++++++----- src/flutter_ffi.rs | 2 ++ src/port_forward.rs | 1 + src/ui_session_interface.rs | 6 +++--- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index 126365a1a..167c2b20c 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -49,7 +49,10 @@ class _PortForwardPageState extends State void initState() { super.initState(); _ffi = FFI(); - _ffi.start(widget.id, isPortForward: true, forceRelay: widget.forceRelay); + _ffi.start(widget.id, + isPortForward: true, + forceRelay: widget.forceRelay, + isRdp: widget.isRDP); Get.put(_ffi, tag: 'pf_${widget.id}'); if (!Platform.isLinux) { Wakelock.enable(); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index e36b8d390..e94452bd7 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1597,6 +1597,7 @@ class FFI { void start(String id, {bool isFileTransfer = false, bool isPortForward = false, + bool isRdp = false, String? switchUuid, String? password, bool? forceRelay}) { @@ -1619,6 +1620,7 @@ class FFI { id: id, isFileTransfer: isFileTransfer, isPortForward: isPortForward, + isRdp: isRdp, switchUuid: switchUuid ?? "", forceRelay: forceRelay ?? false, password: password ?? "", diff --git a/src/flutter.rs b/src/flutter.rs index 9062b5031..db7d466ef 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -505,7 +505,7 @@ impl InvokeUiSession for FlutterHandler { match hook { SessionHook::OnSessionRgba(cb) => { cb(key.to_owned(), rgba); - }, + } } } // If the current rgba is not fetched by flutter, i.e., is valid. @@ -688,6 +688,7 @@ pub fn session_add( id: &str, is_file_transfer: bool, is_port_forward: bool, + is_rdp: bool, switch_uuid: &str, force_relay: bool, password: String, @@ -704,11 +705,14 @@ pub fn session_add( ..Default::default() }; - // TODO rdp let conn_type = if is_file_transfer { ConnType::FILE_TRANSFER } else if is_port_forward { - ConnType::PORT_FORWARD + if is_rdp { + ConnType::RDP + } else { + ConnType::PORT_FORWARD + } } else { ConnType::DEFAULT_CONN }; @@ -725,7 +729,11 @@ pub fn session_add( .unwrap() .initialize(session_id, conn_type, switch_uuid, force_relay); - if let Some(same_id_session) = SESSIONS.write().unwrap().insert(id.to_owned(), session.clone()) { + if let Some(same_id_session) = SESSIONS + .write() + .unwrap() + .insert(id.to_owned(), session.clone()) + { same_id_session.close(); } @@ -1068,4 +1076,4 @@ unsafe extern "C" fn get_rgba() {} #[derive(Clone)] pub enum SessionHook { OnSessionRgba(fn(String, &mut scrap::ImageRgb)), -} \ No newline at end of file +} diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 4424a3bdb..9aadca1bc 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -76,6 +76,7 @@ pub fn session_add_sync( id: String, is_file_transfer: bool, is_port_forward: bool, + is_rdp: bool, switch_uuid: String, force_relay: bool, password: String, @@ -84,6 +85,7 @@ pub fn session_add_sync( &id, is_file_transfer, is_port_forward, + is_rdp, &switch_uuid, force_relay, password, diff --git a/src/port_forward.rs b/src/port_forward.rs index 028875fa3..62ba7b41c 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -92,6 +92,7 @@ pub async fn listen( break; } Some(Data::NewRDP) => { + println!("receive run_rdp from ui_receiver"); run_rdp(addr.port()); } _ => {} diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 8a6a30803..a804484a0 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -88,11 +88,11 @@ impl Session { } pub fn is_port_forward(&self) -> bool { - self.lc + let conn_type = self.lc .read() .unwrap() - .conn_type - .eq(&ConnType::PORT_FORWARD) + .conn_type; + conn_type == ConnType::PORT_FORWARD || conn_type == ConnType::RDP } #[cfg(not(any(target_os = "android", target_os = "ios")))]