diff options
| author | salmonik <raisersoft@proton.me> | 2026-05-26 16:54:47 +0200 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-05-26 16:54:47 +0200 |
| commit | 337a0ec8a55692f44031b00391a48a7b4b8c71b6 (patch) | |
| tree | 00268fe1bf2a5b167c94f77462808a557b64a91b /TODO.md | |
| parent | no need to ship completions anymore! (diff) | |
| download | rsplayer-337a0ec8a55692f44031b00391a48a7b4b8c71b6.tar.gz rsplayer-337a0ec8a55692f44031b00391a48a7b4b8c71b6.zip | |
add licensing
Diffstat (limited to '')
| -rw-r--r-- | TODO.md | 81 |
1 files changed, 5 insertions, 76 deletions
| @@ -1,82 +1,11 @@ | |||
| 1 | # TODO | 1 | # TODO |
| 2 | 2 | ||
| 3 | ## Completed ✓ | 3 | - **Persist queue state** - Save queue to disk so it survives daemon restarts. |
| 4 | 4 | ||
| 5 | - [x] **Dev/release build config separation** - Store config next to binary in dev mode, use XDG in release mode. | 5 | - **Dynamic autocompletion of artists, albums and tracks** - Let shell communicate with the daemon so it returns autocompletions for shell |
| 6 | 6 | ||
| 7 | - [x] **Volume without argument returns current volume** - `rsp volume` now returns current level. | 7 | - **Cache config in daemon** - Avoid repeated Config::load() calls in daemon hot paths; pass display_format through command chain instead |
| 8 | 8 | ||
| 9 | - [x] **Fix SampleRate access in audio.rs:104** - `config.sample_rate().0` is invalid because `cpal::SampleRate` is a type alias for `u32`, not a tuple struct. | 9 | - **Test last.fm scrobbling** - Current scrobbling is only tested for listenbrainz |
| 10 | 10 | ||
| 11 | - [x] **Implement previous track logic** (`src/playback.rs:99`) - Implemented basic previous() that restarts current track if playing/paused. | 11 | - **REPL mode** - like in bluetoothctl |
| 12 | |||
| 13 | - [x] **Remove unused std::thread import** (`src/playback.rs:2`) - Removed commented out import. | ||
| 14 | |||
| 15 | - [x] **Run clippy** - All linting checks pass. | ||
| 16 | |||
| 17 | - [x] **Run tests** - All tests pass. | ||
| 18 | |||
| 19 | - [x] **Check formatting** - Code formatting is correct. | ||
| 20 | |||
| 21 | - [x] **Implement resume functionality** - Implemented pause/resume using cpal stream pause()/play() methods. | ||
| 22 | |||
| 23 | - [x] **Fix audio playback speed and buffer underrun** - Implemented proper sample buffering between callbacks to prevent audio skipping and buffer underrun errors. | ||
| 24 | |||
| 25 | - [x] **Add Resume CLI subcommand** - Added `Resume` subcommand to CLI so users can resume playback after pause. | ||
| 26 | |||
| 27 | - [x] **Implement shuffle mode** - Added shuffle on/off/album functionality with queue management in daemon. Supports `rsp shuffle on/off/album` commands. | ||
| 28 | |||
| 29 | - [x] **Implement next/previous commands** - Next and previous track commands now work with the queue system. | ||
| 30 | |||
| 31 | - [x] **Queue entire directory** - When playing a folder, all audio files are now queued instead of just the first one. | ||
| 32 | |||
| 33 | - [x] **Auto-play next track** - Daemon automatically plays next track when current one ends (using `poll_track_ended()`). | ||
| 34 | |||
| 35 | - [x] **Queue display with pager** - `rsp queue` shows all queued tracks with pager support for long lists. | ||
| 36 | |||
| 37 | - [x] **Album shuffle mode structure** - `ShuffleMode::Album` added to enum and queue logic (behaves like `All` until database ready). | ||
| 38 | |||
| 39 | - [x] **Metadata extraction and display** - Extract ID3/metadata tags from audio files and display as "INDEX. ARTIST - TITLE", falls back to filename. Uses symphonia for metadata extraction. | ||
| 40 | |||
| 41 | - [x] **Flexible play command** - Added `-i/--now`, `-n/--next`, `-l/--last` flags to play command: `play MUSIC` (default - add to end and play), `play -i MUSIC` (insert after current and skip to it), `play -n MUSIC` (insert after current, don't skip), `play -l MUSIC` (add to end of queue). Also fixed queue display to correctly show playing track. | ||
| 42 | |||
| 43 | - [x] **Add unit tests for Player struct** - Tests added for Player, Track, PlaybackState, and ShuffleMode in `tests/playback.rs`. | ||
| 44 | |||
| 45 | - [x] **Database scan command** - Implemented `rsp scan` with `--force` full rescan and `--paths` override options. Uses symphonia for metadata extraction. | ||
| 46 | |||
| 47 | - [x] **Settings subcommands** - Implemented `rsp settings get/set/list/unset` for config management. | ||
| 48 | |||
| 49 | - [x] **Shell completions** - Generate shell completions with `rsp completions bash|elvish|fish|powershell|zsh`. | ||
| 50 | |||
| 51 | - [x] **Extract queue module** - Moved `Queue`, `Track`, `ShuffleMode`, `AudioMetadata` from daemon into `src/queue.rs` with public API and accessor methods. | ||
| 52 | |||
| 53 | - [x] **Comprehensive queue tests** - 34 tests covering navigation, shuffle, insert ordering, edge cases, and display. | ||
| 54 | |||
| 55 | - [x] **Fix queue/play bugs** - `rsp play <file>` no longer interrupts playback when something is already playing; directory `play -n`/`play -i` now inserts in correct order; removed dead duplicate shuffle handler; queue display no longer shows `(playing)` when playback is stopped. | ||
| 56 | |||
| 57 | - [x] **Systemd service unit** - Create systemd service file for auto-start. | ||
| 58 | |||
| 59 | - [x] **Desktop notifications** - Send notifications on track change, queue end, and errors via `notify-rust`. | ||
| 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 | |||
| 63 | - [x] **Customize status/notification display** - Added `display_format` config with `$ARTIST`, `$ALBUM`, `$TRACK` variables. Unified format for queue display, status, and notifications. | ||
| 64 | |||
| 65 | ## Remaining Work | ||
| 66 | |||
| 67 | ### Phase 1-3: Completed ✓ | ||
| 68 | |||
| 69 | - [x] **Play command rewrite** - No args queues to end (play if queue empty + not playing), -i inserts and plays, -n inserts without playing, removed -l flag | ||
| 70 | - [x] **Queue display rewrite** - Returns full output (client can pipe to pager), removed daemon-side pager (fails without TTY) | ||
| 71 | |||
| 72 | - [x] **Shuffle rewrite** - Always remembers original queue, shuffle none keeps played tracks in place, album shuffle groups by album | ||
| 73 | |||
| 74 | ### Optional Features | ||
| 75 | |||
| 76 | - [ ] **Persist queue state** - Save queue to disk so it survives daemon restarts. | ||
| 77 | |||
| 78 | - [x] **Scrobbling (Last.fm/ListenBrainz)** - Full implementation with Last.fm API signing, ListenBrainz token auth, daemon integration, token validation, and `rsp settings reload`. | ||
| 79 | |||
| 80 | - [ ] **Dynamic autocompletion of artists, albums and tracks** - Let shell communicate with the daemon so it returns autocompletions for shell | ||
| 81 | |||
| 82 | - [ ] **Cache config in daemon** - Avoid repeated Config::load() calls in daemon hot paths; pass display_format through command chain instead | ||
