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
|
# Use provided key or default to first tab
|
||||||
current_key = restore_tab_key or self._tab_keys[0]
|
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.terminal_tab._disconnect()
|
||||||
self.files_tab._disconnect_sftp()
|
|
||||||
|
|
||||||
# Detach tab contents
|
# Detach tab contents
|
||||||
self.terminal_tab.pack_forget()
|
self.terminal_tab.pack_forget()
|
||||||
@@ -219,9 +225,28 @@ class App(ctk.CTk):
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
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:
|
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
|
# Update sidebar
|
||||||
self.sidebar.update_language()
|
self.sidebar.update_language()
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user