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:
chrome-storm-c442
2026-02-24 02:30:46 -05:00
parent 85a8c3ffc6
commit ed34546ef6
2 changed files with 29 additions and 4 deletions

View File

@@ -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()