Apurva Tiwari commited on
Commit
c7f9fd7
·
1 Parent(s): 7d1144c

Remove all browser lifecycle detection - embrace state persistence

Browse files

- Remove unused reset_ui and on_page_load controllers
- Remove client-side session detection scripts
- Let browser remember last UI state (sessions persist)
- Users can return to landing via Main Page button
- Much simpler and cleaner code

Files changed (1) hide show
  1. app.py +0 -90
app.py CHANGED
@@ -23,31 +23,6 @@ from simple_session_manager import SESSION_MANAGER, get_session_by_alias
23
  server = get_server()
24
  state, ctrl = server.state, server.controller
25
 
26
- # Track client connections to detect new browser sessions
27
- _active_clients = set()
28
-
29
- @server.state.change("trame__busy")
30
- def _on_client_activity(*args, **kwargs):
31
- """
32
- Detect new client connections.
33
- When trame__busy changes from None, it means a client just connected.
34
- """
35
- client_id = kwargs.get("__client_id")
36
- if client_id and client_id not in _active_clients:
37
- print(f"[APP] New client connected: {client_id}")
38
- _active_clients.add(client_id)
39
-
40
- # ALWAYS reset to landing page for new connections
41
- # This ensures browser reopens always start at landing
42
- print(f"[APP] Resetting to landing page for new client")
43
- state.current_page = None
44
- state.session_active = False
45
- state.session_card_visible = True
46
- state.session_alias = ""
47
- state.current_session_id = None
48
- state.session_alias_input = ""
49
- state.session_error = ""
50
-
51
  # --- App state
52
  state.current_page = None # None = landing, "EM" or "QLBM"
53
  state.session_active = False
@@ -112,40 +87,6 @@ def on_session_selected(session_id: str):
112
  print(f"[APP] Error selecting session: {e}")
113
  state.session_error = str(e)
114
  state.session_active = False
115
-
116
- # --- Controller to reset UI on page load ---
117
- @ctrl.add("reset_ui")
118
- def _reset_ui():
119
- """Reset UI to landing page (called when browser closes/reopens)."""
120
- print(f"[RESET_UI] Resetting to landing page")
121
- print(f"[RESET_UI] Current state: page={state.current_page}, session_active={state.session_active}, session_id={state.current_session_id}")
122
-
123
- state.current_page = None
124
- state.session_card_visible = True
125
- state.session_active = False
126
- state.session_alias = ""
127
- state.current_session_id = None
128
- state.session_alias_input = ""
129
- state.session_error = ""
130
- state.session_action_trigger = None
131
-
132
- print(f"[RESET_UI] State after reset: page={state.current_page}, session_active={state.session_active}")
133
-
134
-
135
- @ctrl.add("on_page_load")
136
- def _on_page_load(is_new_session: bool):
137
- """Handle page load event from browser."""
138
- print(f"[PAGE_LOAD] is_new_session={is_new_session}")
139
- print(f"[PAGE_LOAD] Current state: page={state.current_page}, session_active={state.session_active}, session_id={state.current_session_id}")
140
-
141
- if is_new_session:
142
- print(f"[PAGE_LOAD] *** NEW BROWSER SESSION DETECTED ***")
143
- print(f"[PAGE_LOAD] Resetting to landing page")
144
- _reset_ui()
145
- else:
146
- print(f"[PAGE_LOAD] Page refresh in same browser session - keeping current state")
147
-
148
-
149
  # Watcher to reset navigation when no session is active
150
  @state.change("session_active")
151
  def _on_session_status_change(session_active, **kwargs):
@@ -254,37 +195,6 @@ with SinglePageLayout(server) as layout:
254
  .success-bounce { animation: successBounce 0.6s ease; color: #1e9e3e; }
255
  """)
256
 
257
- # Simple client-side script to detect new browser sessions
258
- # This is MUCH simpler than the complex lifecycle detection
259
- with trame_html.Div():
260
- trame_html.Script("""
261
- console.log('[SESSION-CHECK] Checking browser session state...');
262
-
263
- // Check if this is a new browser session (sessionStorage is empty when browser reopens)
264
- const SESSION_KEY = '__quantum_active__';
265
- const wasActive = sessionStorage.getItem(SESSION_KEY);
266
-
267
- if (!wasActive) {
268
- console.log('[SESSION-CHECK] New browser session - sessionStorage was empty');
269
- sessionStorage.setItem(SESSION_KEY, 'true');
270
-
271
- // Wait for Trame to be ready, then reset to landing page
272
- setTimeout(function() {
273
- if (window.trame && window.trame.state) {
274
- console.log('[SESSION-CHECK] Resetting to landing page');
275
- window.trame.state.current_page = null;
276
- window.trame.state.session_active = false;
277
- window.trame.state.session_card_visible = true;
278
- window.trame.state.current_session_id = null;
279
- }
280
- }, 200);
281
- } else {
282
- console.log('[SESSION-CHECK] Same browser session - keeping state');
283
- }
284
- """)
285
-
286
-
287
-
288
  with layout.toolbar:
289
  vuetify3.VSpacer()
290
 
 
23
  server = get_server()
24
  state, ctrl = server.state, server.controller
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  # --- App state
27
  state.current_page = None # None = landing, "EM" or "QLBM"
28
  state.session_active = False
 
87
  print(f"[APP] Error selecting session: {e}")
88
  state.session_error = str(e)
89
  state.session_active = False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  # Watcher to reset navigation when no session is active
91
  @state.change("session_active")
92
  def _on_session_status_change(session_active, **kwargs):
 
195
  .success-bounce { animation: successBounce 0.6s ease; color: #1e9e3e; }
196
  """)
197
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  with layout.toolbar:
199
  vuetify3.VSpacer()
200