aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO.md38
1 files changed, 35 insertions, 3 deletions
diff --git a/TODO.md b/TODO.md
index 1048440..59ba564 100644
--- a/TODO.md
+++ b/TODO.md
@@ -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