fix: preserve SFTP session on language switch
Save and restore live SFTP session when switching languages instead of disconnecting and recreating everything from scratch. Terminal reconnects automatically via set_server(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
33
gui/app.py
33
gui/app.py
@@ -171,9 +171,15 @@ class App(ctk.CTk):
|
||||
# Use provided key or default to first tab
|
||||
current_key = restore_tab_key or self._tab_keys[0]
|
||||
|
||||
# Disconnect terminal and SFTP before destroying tabs
|
||||
# Save live SFTP session before destroying tabs
|
||||
saved_sftp = self.files_tab._sftp
|
||||
saved_sftp_path = self.files_tab._remote_path
|
||||
saved_sftp_alias = self.files_tab._current_alias
|
||||
saved_local_path = self.files_tab._local_path
|
||||
self.files_tab._sftp = None # Prevent disconnect on destroy
|
||||
|
||||
# Disconnect terminal before destroying tabs
|
||||
self.terminal_tab._disconnect()
|
||||
self.files_tab._disconnect_sftp()
|
||||
|
||||
# Detach tab contents
|
||||
self.terminal_tab.pack_forget()
|
||||
@@ -219,9 +225,28 @@ class App(ctk.CTk):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Restore server selection
|
||||
# Restore SFTP session without reconnecting
|
||||
if saved_sftp and saved_sftp.connected:
|
||||
self.files_tab._sftp = saved_sftp
|
||||
self.files_tab._current_alias = saved_sftp_alias
|
||||
self.files_tab._remote_path = saved_sftp_path
|
||||
self.files_tab._local_path = saved_local_path
|
||||
self.files_tab._set_remote_buttons_state("normal")
|
||||
self.files_tab._remote_status.configure(
|
||||
text=t("connected_sftp").format(alias=saved_sftp_alias)
|
||||
)
|
||||
self.files_tab._refresh_local()
|
||||
self.files_tab._refresh_remote()
|
||||
elif alias:
|
||||
# No live session — reconnect via server selection
|
||||
self.files_tab.set_server(alias)
|
||||
|
||||
# Restore server selection for other tabs
|
||||
if alias:
|
||||
self._on_server_select(alias)
|
||||
self.terminal_tab.set_server(alias)
|
||||
self.info_tab.set_server(alias)
|
||||
self.keys_tab.set_server(alias)
|
||||
self.totp_tab.set_server(alias)
|
||||
|
||||
# Update sidebar
|
||||
self.sidebar.update_language()
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user