aboutsummaryrefslogtreecommitdiffstats
path: root/screens/sessions.py
diff options
context:
space:
mode:
Diffstat (limited to 'screens/sessions.py')
-rw-r--r--screens/sessions.py77
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)