From aeae2b3ef7a485cce8d0a3a9c34edf1b1369684a Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 21:46:39 +0800 Subject: [PATCH 1/2] Fix, check if is cached peer info when handle_peer_info Signed-off-by: dignow --- src/client.rs | 2 +- src/client/io_loop.rs | 2 +- src/port_forward.rs | 2 +- src/ui_session_interface.rs | 14 ++++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/client.rs b/src/client.rs index 798550467..84f338c63 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2366,7 +2366,7 @@ pub trait Interface: Send + Clone + 'static + Sized { fn send(&self, data: Data); fn msgbox(&self, msgtype: &str, title: &str, text: &str, link: &str); fn handle_login_error(&mut self, err: &str) -> bool; - fn handle_peer_info(&mut self, pi: PeerInfo); + fn handle_peer_info(&mut self, pi: PeerInfo, is_cached_pi: bool); fn on_error(&self, err: &str) { self.msgbox("error", "Error", err, ""); } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 08c3a6a9b..4c0930f31 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1026,7 +1026,7 @@ impl Remote { { self.handler.cache_flutter.write().unwrap().pi = pi.clone(); } - self.handler.handle_peer_info(pi); + self.handler.handle_peer_info(pi, false); #[cfg(not(feature = "flutter"))] self.check_clipboard_file_context(); if !(self.handler.is_file_transfer() || self.handler.is_port_forward()) { diff --git a/src/port_forward.rs b/src/port_forward.rs index 6a087abe2..1e918cce1 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -146,7 +146,7 @@ async fn connect_and_login( return Ok(None); } Some(login_response::Union::PeerInfo(pi)) => { - interface.handle_peer_info(pi); + interface.handle_peer_info(pi, false); break; } _ => {} diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index bbf6d0aec..1c79e7d9c 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -1078,7 +1078,7 @@ impl Interface for Session { handle_login_error(self.lc.clone(), err, self) } - fn handle_peer_info(&mut self, mut pi: PeerInfo) { + fn handle_peer_info(&mut self, mut pi: PeerInfo, is_cached_pi: bool) { log::debug!("handle_peer_info :{:?}", pi); pi.username = self.lc.read().unwrap().get_username(&pi); if pi.current_display as usize >= pi.displays.len() { @@ -1099,10 +1099,12 @@ impl Interface for Session { self.msgbox("error", "Remote Error", "No Display", ""); return; } - self.try_change_init_resolution(pi.current_display); - let p = self.lc.read().unwrap().should_auto_login(); - if !p.is_empty() { - input_os_password(p, true, self.clone()); + if !is_cached_pi { + self.try_change_init_resolution(pi.current_display); + let p = self.lc.read().unwrap().should_auto_login(); + if !p.is_empty() { + input_os_password(p, true, self.clone()); + } } let current = &pi.displays[pi.current_display as usize]; self.set_display( @@ -1211,7 +1213,7 @@ impl Session { self.set_connection_type(is_secured, direct); } let pi = self.cache_flutter.read().unwrap().pi.clone(); - self.handle_peer_info(pi); + self.handle_peer_info(pi, true); if let Some(sp) = self.cache_flutter.read().unwrap().sp.as_ref() { self.handle_peer_switch_display(sp); } From 845fdec015f48add7952692475b1b0d8e1ca0019 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 22:01:56 +0800 Subject: [PATCH 2/2] update displays Signed-off-by: dignow --- src/client/io_loop.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 4c0930f31..9e78b17a5 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1506,6 +1506,12 @@ impl Remote { } } Some(message::Union::PeerInfo(pi)) => { + #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] + { + self.handler.cache_flutter.write().unwrap().pi.displays = + pi.displays.clone(); + } self.handler.set_displays(&pi.displays); } _ => {}