Skip to content

Add interactive episode selection UI - #4

Merged
frogshead merged 3 commits into
mainfrom
feature/episode-selection-ui
Sep 6, 2025
Merged

Add interactive episode selection UI#4
frogshead merged 3 commits into
mainfrom
feature/episode-selection-ui

Conversation

@frogshead

Copy link
Copy Markdown
Owner

Summary

  • Implement complete podcast → episode selection flow with ratatui terminal UI
  • Add Episode struct to properly represent podcast episodes with metadata
  • Create interactive episode selection interface showing latest episodes first
  • Both podcast and episode selection now use consistent ratatui interface
  • Maintain graceful fallback to index selection when terminal UI unavailable

Features

  • Two-stage selection: First select podcast, then select episode from that podcast
  • Episode metadata: Display episode titles with publication dates
  • Latest first: Episodes are shown in chronological order (latest episodes first)
  • Visual navigation: Arrow keys (↑/↓) or vim-style keys (j/k) for navigation
  • Consistent UI: Both podcast and episode selection use same ratatui interface
  • Graceful fallback: Falls back to index selection in non-interactive environments
  • Error handling: Proper error handling for RSS feed parsing issues

Test plan

  • Build successfully with Episode struct and selection logic
  • Fallback selection works in non-interactive environments
  • Full flow works: podcast selection → episode selection → link opening
  • Interactive UI works in terminal environments for both podcast and episode selection
  • Navigation with arrow keys and vim keys functions properly in both UIs
  • Episode selection shows latest episodes first with proper date formatting
  • Selected episode links open correctly in browser

🤖 Generated with Claude Code

frogshead and others added 3 commits September 6, 2025 14:01
Implement interactive terminal UI for selecting podcast episodes:
- Added Episode struct to represent podcast episodes with title, description, pub_date, and content
- Modified get_episodes to return Vec<Episode> instead of directly opening first episode
- Created ratatui-based episode selection interface with latest episodes first
- Added fallback selection for non-interactive environments
- Implemented full flow: podcast selection → episode selection → open episode links
- Both podcast and episode selection support arrow keys (↑/↓) or vim keys (j/k)
- Visual interface with highlighting and help text
- Graceful error handling for RSS feed parsing issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
When user presses 'q' or Esc in either selection UI, the application now exits cleanly without opening any links:

- Modified podcast and episode selectors to return Option<usize> instead of usize
- Return None when user quits (q/Esc), Some(index) when user selects
- Updated main flow to handle quit scenarios gracefully
- Added quit option ('q') to fallback text-based selectors
- Display "Exiting without opening any links." message when quitting

This ensures users can exit at any point without accidentally opening unwanted browser tabs.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated Cargo.lock to resolve native-tls compatibility issue:
- native-tls: 0.2.12 → 0.2.14 (fixes parse2 method not found error)
- Updated many other dependencies to latest compatible versions
- Resolves GitHub Actions build failure caused by OpenSSL API mismatch

The issue was that native-tls v0.2.12 was calling a parse2 method that
doesn't exist in the OpenSSL version used in GitHub Actions environment.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@frogshead
frogshead merged commit b8e6499 into main Sep 6, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant