aboutsummaryrefslogtreecommitdiffstats
path: root/PLAN.md
diff options
context:
space:
mode:
Diffstat (limited to 'PLAN.md')
-rw-r--r--PLAN.md40
1 files changed, 22 insertions, 18 deletions
diff --git a/PLAN.md b/PLAN.md
index 98bd897..d04e528 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -1,24 +1,28 @@
1# rsplayer Project Plan 1# rsplayer Project Plan
2 2
3## Phase 1: Setup & Core 3## Phase 1: Setup & Core ✓
41. Initialize Rust project, add dependencies: `clap` (CLI/autocompletion), `rusqlite` (SQLite), `symphonia`/`cpal` (audio), `directories` (XDG paths), `serde`/`toml` (config), `tokio` (daemon async), `reqwest` (scrobbling). 41. Initialize Rust project, add dependencies: `clap` (CLI/autocompletion), `rusqlite` (SQLite), `symphonia`/`cpal` (audio), `directories` (XDG paths), `serde`/`toml` (config), `tokio` (daemon async), `reqwest` (scrobbling). ✓
52. Config stored at `$XDG_CONFIG_HOME/rsplayer/config.toml`: `music_paths` (array of directories to scan), `scan_interval` (optional periodic rescan interval), scrobbling credentials, daemon socket path. Daemon auto-scans configured paths on first run if database is empty/missing. 52. Config stored at `$XDG_CONFIG_HOME/rsplayer/config.toml`: `music_paths` (array of directories to scan), `scan_interval` (optional periodic rescan interval), scrobbling credentials, daemon socket path. ✓
63. SQLite library schema: `artists`, `albums`, `tracks` tables. Implement `rsp scan` to scan all paths in config's `music_paths`, populate/update database. Support `--force` full rescan, `--paths` override config paths. Auto-scan triggers on first run (if DB empty) and periodically per `scan_interval` config. 63. SQLite library schema: `artists`, `albums`, `tracks` tables. Implement `rsp scan` to scan all paths in config's `music_paths`, populate/update database. ✓
7 7
8## Phase 2: Daemon 8## Phase 2: Daemon ✓
91. Unix socket daemon (path: `$XDG_RUNTIME_DIR/rsplayer/daemon.sock`) for IPC. 91. Unix socket daemon (path: `$XDG_RUNTIME_DIR/rsplayer/daemon.sock`) for IPC. ✓
102. Audio engine: Symphonia decode + CPAL output, support play/pause/stop/volume/seek. 102. Audio engine: Symphonia decode + CPAL output, support play/pause/stop/volume/seek. ✓
113. Queue: in-memory, `last` (append to end, default), `now` (play immediately, ending current song playback), `next` (insert after current). 113. Queue: in-memory, `last` (append to end, default), `now` (play immediately, ending current song playback), `next` (insert after current). ✓
124. Shuffle modes: `none` (linear playback), `all` (shuffle all tracks), `album` (shuffle within album). 124. Shuffle modes: `none` (linear playback), `all` (shuffle all tracks), `album` (shuffle within album, structure ready). ✓
135. Scrobbling: Last.fm and ListenBrainz support via configured credentials.
14 13
15## Phase 3: CLI & Completion 14## Phase 3: CLI & Completion ✓
161. Clap-based CLI with all subcommands. Generate shell completions for bash/zsh/fish, suggest database artists/albums/tracks, file paths, and config keys/values. 151. Clap-based CLI with all subcommands. ✓
172. `rsp status`: show player state, current track, progress, volume, next 2-3 queue items. 162. Shell completions for bash/zsh/fish/powershell/elvish (`rsp completions`). PARTIALLY
183. `rsp queue`: no arguments display current queue; with arguments add items (default `last` behavior). 173. `rsp status`: show player state, current track, progress, volume, next 2-3 queue items. ✓
194. `rsp settings` subcommands: `get`, `set`, `list`, `unset` config values (music paths, scrobbling credentials, scan interval, etc.) without manual file editing. 184. `rsp queue`: no arguments display current queue; with arguments add items (default `last` behavior). BUGGED
195. `rsp settings` subcommands: `get`, `set`, `list`, `unset` config values. ✓
206. `rsp scan`: `--force` full rescan, `--paths` override config paths. Uses symphonia for metadata. ✓
217. `rsp play`: flexible insert options (`-i`/`--now`, `-n`/`--next`, `-l`/`--last`). ✓
20 22
21## Phase 4: Polish 23## Phase 4: Polish
221. Direct file/folder playback: prioritize database metadata if path matches known artist/album. 241. [ ] Queue state persistence - Save queue to disk so it survives daemon restarts.
232. Logging, systemd service unit, unit tests. 252. [ ] Album shuffle mode - Implement proper `ShuffleMode::Album` (shuffle tracks within same album/folder).
243. Periodic rescan logic per config's `scan_interval`. 263. [ ] Scrobbling - Last.fm and ListenBrainz support via configured credentials.
274. [ ] Logging and error handling improvements.
285. [ ] Systemd service unit for auto-start.