refactor windows specific session, file transfer and waiting for image (#7184)

* refactor windows specific session, file transfer and waiting for image

1. File transfer doesn't show directory until correct session id is ensured
2. Fix file transfer, caused by `pi.username = self.lc.read().unwrap().get_username(&pi);` in `handle_peer_info` override empty username and `get_active_username` doesn't return currect session username
* Fix home directory not change when session changed, or wrong home directory
* Fix show empty remote directory rather than error messagbox when current session is in login screen
3. Show `Connected, waiting for image` after user choose the same
   session id

Signed-off-by: 21pages <pages21@163.com>

* update translations

Signed-off-by: 21pages <pages21@163.com>

* Update connection.rs

---------

Signed-off-by: 21pages <pages21@163.com>
Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
21pages
2024-02-19 10:32:13 +08:00
committed by GitHub
Unverified
parent 0f44de7dc3
commit bf5abdb520
47 changed files with 553 additions and 121 deletions

View File

@@ -1023,6 +1023,7 @@ impl<T: InvokeUiSession> Session<T> {
if true == force_relay {
self.lc.write().unwrap().force_relay = true;
}
self.lc.write().unwrap().peer_info = None;
let mut lock = self.thread.lock().unwrap();
// No need to join the previous thread, because it will exit automatically.
// And the previous thread will not change important states.
@@ -1260,6 +1261,25 @@ impl<T: InvokeUiSession> Session<T> {
let mut msg = Message::new();
msg.set_misc(misc);
self.send(Data::Message(msg));
let pi = self.lc.read().unwrap().peer_info.clone();
if let Some(pi) = pi {
if pi.windows_sessions.current_sid == sid {
if self.is_file_transfer() {
if pi.username.is_empty() {
self.on_error(
"No active console user logged on, please connect and logon first.",
);
}
} else {
self.msgbox(
"success",
"Successful",
"Connected, waiting for image...",
"",
);
}
}
}
} else {
log::error!("selected invalid sid: {}", sid);
}
@@ -1371,7 +1391,7 @@ impl<T: InvokeUiSession> Interface for Session<T> {
fn handle_peer_info(&self, mut pi: PeerInfo) {
log::debug!("handle_peer_info :{:?}", pi);
pi.username = self.lc.read().unwrap().get_username(&pi);
self.lc.write().unwrap().peer_info = Some(pi.clone());
if pi.current_display as usize >= pi.displays.len() {
pi.current_display = 0;
}
@@ -1379,7 +1399,7 @@ impl<T: InvokeUiSession> Interface for Session<T> {
self.set_permission("restart", false);
}
if self.is_file_transfer() {
if pi.username.is_empty() {
if pi.username.is_empty() && pi.windows_sessions.sessions.is_empty() {
self.on_error("No active console user logged on, please connect and logon first.");
return;
}