Three quality-of-life additions to the Library browser and course
pages:
- A course page shows a "Resume: <lesson>" button when there's a
last-visited lesson, using Course.last_accessed_path (already
populated by apply_progress_to_tree, just not surfaced before) -
no more scrolling the tree to find where you left off.
- "Surprise Me" picks a random not-yet-fully-watched course and loads
it, for when there's too much library to decide what to watch.
Reuses the already-cached get_all_course_dirs() and the same
per-course completed/total shape _scan_library_activity() already
computes for Stale Courses - no new scanning.
- A select-mode toggle in the Library browser adds checkboxes to every
row/card (list and grid) with a bulk-action bar to hide or queue
several courses/folders at once, via two new endpoints
(/api/hidden-paths/bulk, /api/next-up/bulk) that reuse the existing
single-item set_path_hidden()/set_path_queued() in a loop. Selection
is scoped to the current folder view and clears on navigation.
Also fixes runTranscriptSearch() going silently blank on zero results
instead of showing a "no matches" message, and updates the Help page
to cover all of this.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>