File size: 3,002 Bytes
7bd8010
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import logging
from typing import Optional, List, Tuple

from components.state import SessionState, list_saved_sessions
from utils.common.utils import create_new_session_copy, format_units_display_markdown, \
    format_unit_dropdown_choices, update_progress_display

def save_session_logic(session: SessionState, session_name: str):
    """Core logic for saving sessions - moved from app.py"""
    if not session_name.strip():
        return session, "Please enter a name for the session.", list_saved_sessions()
    
    session_copy = create_new_session_copy(session)
    message = session_copy.save_session(session_name.strip())
    return session_copy, message, list_saved_sessions()


def load_session_logic(session_name: str):
    """Core logic for loading sessions - moved from app.py"""
    # Default return values for error cases or initial state (11 outputs)
    default_session_state = SessionState()
    default_units_dropdown_choices = ["No units available"]
    default_units_display_text = "No units generated yet."
    default_progress_stats = "No session data available."
    default_progress_bar_html = ""
    default_progress_df = [] 

    if not session_name.strip():
        return default_session_state, "Please select a session to load.", \
               default_units_dropdown_choices, None, default_units_dropdown_choices, default_units_dropdown_choices, \
               default_units_display_text, default_progress_stats, default_progress_bar_html, default_progress_df
    try:
        loaded_session = SessionState.load_session(session_name.strip())
        
        units_display_text = format_units_display_markdown(loaded_session.units)
        dropdown_choices, default_value = format_unit_dropdown_choices(loaded_session.units)
        
        # Unpack all 5 values from update_progress_display
        completed_stats, in_progress_stats, average_score_stats, overall_progress_html, progress_df_value = update_progress_display(loaded_session)

        return loaded_session, f"Session '{session_name}' loaded successfully!", \
               dropdown_choices, default_value, dropdown_choices, dropdown_choices, \
               units_display_text, completed_stats, in_progress_stats, average_score_stats, overall_progress_html, progress_df_value
    except FileNotFoundError as e:
        return default_session_state, str(e), \
               default_units_dropdown_choices, None, default_units_dropdown_choices, default_units_dropdown_choices, \
               default_units_display_text, default_progress_stats, default_progress_bar_html, default_progress_df
    except Exception as e:
        logging.error(f"Error loading session: {e}", exc_info=True)
        return default_session_state, f"Error loading session: {str(e)}", \
               default_units_dropdown_choices, None, default_units_dropdown_choices, default_units_dropdown_choices, \
               default_units_display_text, default_progress_stats, default_progress_bar_html, default_progress_df