diff options
| -rw-r--r-- | screens/sessions.py | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/screens/sessions.py b/screens/sessions.py index 67ef9ba..56cde7c 100644 --- a/screens/sessions.py +++ b/screens/sessions.py @@ -119,35 +119,57 @@ def _confirm_and_save( session_note: str | None, entries: list[dict], ) -> None: - """Show session summary and save if confirmed.""" - ui.clear_screen() - ui.print_header("Session Summary") - print(f"Date: {date_time}") - if session_note: - print(f"Note: {session_note}") - ui.print_table( - ["#", "Exercise", "Sets", "Reps", "Weight", "Rest", "LSRPE", "Note"], - [ + """Show session summary with option to reorder, then save or cancel.""" + while True: + ui.clear_screen() + ui.print_header("Session Summary") + print(f"Date: {date_time}") + if session_note: + print(f"Note: {session_note}") + ui.print_table( + ["#", "Exercise", "Sets", "Reps", "Weight", "Rest", "LSRPE", "Note"], [ - str(i), - e["exercise_name"], - str(e["sets"]), - str(e["reps"]).replace(",", "/"), - ui.format_weight(e["weight"], e["bw_relative"]), - ui.format_rest_time(e["rest_time"]), - str(e["lsrpe"]), - e["note"] or "", - ] - for i, e in enumerate(entries, 1) - ], - ) + [ + str(i), + e["exercise_name"], + str(e["sets"]), + str(e["reps"]).replace(",", "/"), + ui.format_weight(e["weight"], e["bw_relative"]), + ui.format_rest_time(e["rest_time"]), + str(e["lsrpe"]), + e["note"] or "", + ] + for i, e in enumerate(entries, 1) + ], + ) + + action = input("\nActions: (s)ave, (m)ove, (c)ancel\n> ").strip().lower() - if ui.confirm("\nSave this session?"): - models.save_workout_session(conn, date_time, session_note, entries) - print("Session saved!") - else: - print("Session discarded.") - ui.pause() + if action == "s": + models.save_workout_session(conn, date_time, session_note, entries) + print("Session saved!") + ui.pause() + return + + elif action == "m": + if len(entries) < 2: + print("Need at least 2 exercises to move.") + ui.pause() + continue + from_pos = ui.prompt_int( + "Move exercise #: ", min_val=1, max_val=len(entries) + ) + to_pos = ui.prompt_int( + "Move to position #: ", min_val=1, max_val=len(entries) + ) + assert from_pos is not None and to_pos is not None + item = entries.pop(from_pos - 1) + entries.insert(to_pos - 1, item) + + elif action == "c": + print("Session discarded.") + ui.pause() + return def log_workout(conn: sqlite3.Connection) -> None: @@ -158,6 +180,7 @@ def log_workout(conn: sqlite3.Connection) -> None: ui.clear_screen() ui.print_header("Log Workout") + print("(You can reorder exercises before saving.)\n") date_time = ui.prompt_datetime("Date/Time") session_note = ui.prompt_str("Session note (optional): ", required=False) |
