diff options
Diffstat (limited to 'TODO.md')
| -rw-r--r-- | TODO.md | 38 |
1 files changed, 35 insertions, 3 deletions
| @@ -58,12 +58,44 @@ | |||
| 58 | 58 | ||
| 59 | - [x] **Desktop notifications** - Send notifications on track change, queue end, and errors via `notify-rust`. | 59 | - [x] **Desktop notifications** - Send notifications on track change, queue end, and errors via `notify-rust`. |
| 60 | 60 | ||
| 61 | - [x] **Shuffle first song** - `update_shuffle_indices` now shuffles all indices when position is 0; directory playback uses `q.current()` instead of `files.first()`. | ||
| 62 | |||
| 61 | ## Remaining Work | 63 | ## Remaining Work |
| 62 | 64 | ||
| 63 | - [ ] **Persist queue state** - Save queue to disk so it survives daemon restarts. (optional) | 65 | ### Phase 1: Play Command Rewrite |
| 66 | |||
| 67 | - [ ] **Rewrite `rsp play` behavior** | ||
| 68 | - No options: Add to end of queue. If queue is empty AND player is in PLAY state, play immediately | ||
| 69 | - `-i` / `--now`: Add after current track, then skip to it (insert + play) | ||
| 70 | - `-n` / `--next`: Add after current track, don't skip | ||
| 71 | - Remove `-l` / `--last` flag (redundant, it's default behavior) | ||
| 72 | - Update CLI definitions in `src/cli.rs` | ||
| 73 | - Update daemon handler in `src/daemon.rs` | ||
| 74 | |||
| 75 | ### Phase 2: Queue Display Rewrite | ||
| 76 | |||
| 77 | - [ ] **Rewrite `rsp queue` behavior** | ||
| 78 | - If queue rows <= terminal rows, display as-is (no pager needed) | ||
| 79 | - If queue rows > terminal rows, pipe to pager (e.g., `less -R`) | ||
| 80 | - Get terminal size using `terminal_size` crate or `ansi_term` / `crossterm` | ||
| 81 | - Update queue display logic in `src/daemon.rs` | ||
| 82 | |||
| 83 | ### Phase 3: Shuffle Rewrite | ||
| 84 | |||
| 85 | - [ ] **Rewrite shuffle mode** | ||
| 86 | - Always remember original queue (add `original_tracks: Vec<Track>` field) | ||
| 87 | - `rsp shuffle all`: Shuffle tracks after current position once, store original queue | ||
| 88 | - `rsp shuffle none`: Restore from original queue - keep already-played tracks in place, insert unplayed tracks in original order after current position | ||
| 89 | - `rsp shuffle album`: Shuffle tracks within each album's range separately (don't mix albums) | ||
| 90 | - Update `Queue` struct in `src/queue.rs` with original queue storage | ||
| 91 | - Update shuffle logic in `src/queue.rs` and daemon handlers in `src/daemon.rs` | ||
| 92 | |||
| 93 | ### Phase 4: Optional Features | ||
| 94 | |||
| 95 | - [ ] **Persist queue state** - Save queue to disk so it survives daemon restarts. | ||
| 64 | 96 | ||
| 65 | - [ ] **Scrobbling (Last.fm/ListenBrainz)** - Add scrobbling support via configured credentials. | 97 | - [ ] **Scrobbling (Last.fm/ListenBrainz)** - Add scrobbling support via configured credentials. |
| 66 | 98 | ||
| 67 | - [x] **Shuffle first song** - `update_shuffle_indices` now shuffles all indices when position is 0; directory playback uses `q.current()` instead of `files.first()`. | 99 | - [ ] **Customize status display** - Variables like $ARTIST, $ALBUM, $TRACK available in config so `queue`, `status` and notifs can be customized |
| 68 | 100 | ||
| 69 | - [ ] **In album shuffle** - Shuffle songs within albums, don't mix albums together (only applies to shuffle: album). | 101 | - [ ] **Dynamic autocompletion of artists, albums and tracks** - Let shell communicate with the daemon so it returns autocompletions for shell \ No newline at end of file |
