aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
* first public release.salmonik2026-05-163-16/+40
|
* Add scrobbling support (Last.fm + ListenBrainz) and rsp settings reloadsalmonik2026-05-164-37/+617
| | | | | | | | | | | | - Full Last.fm API implementation with MD5 signing (track.updateNowPlaying, track.scrobble) - Full ListenBrainz API implementation (/1/submit-listens for playing_now and single) - ScrobbleState in daemon tracking track, start time, and unix timestamp per play - Scrobble threshold: ≥30s play AND (≥half duration OR ≥4 min) - Duration extraction from symphonia codec params into AudioMetadata and Track - Token validation at daemon startup and on config change - ListenBrainz token valid (user: Salmonium) command to re-read config from disk (avoids token in shell history) - Desktop notifications for token validation results - Empty-credential filtering (empty string = no-op)
* aesthetic changessalmonik2026-05-152-4/+19
|
* Regenerate shell completions and install script fixessalmonik2026-05-131-1/+42
| | | | | | | | | - Add hidden completions subcommand to CLI (developer use only) - Regenerate all completion scripts from current CLI structure - Add elvish and powershell completion scripts - install.sh: Fix rsp stop -> rsp stop-daemon, rsp start -> rsp start-daemon - install.sh: Install completions for user's current shell - install.sh: Zsh uses /usr/share/zsh/site-functions/_rsp directly
* Add display_format config, fix restart command, clean up config codesalmonik2026-05-115-66/+237
| | | | | | | | | | | - Add display_format option with get/set/list/unset for customizing track display - Add Track::format() supporting $ARTIST, $ALBUM, $TRACK variables - Update queue, status, notifications to use display_format - Fix restart command using wrong subcommand 'start' -> 'start-daemon' - Remove socket_path from config (now computed at runtime from XDG_RUNTIME_DIR) - Consolidate duplicate save() and save_all() into single save() - Fix redundant .clone().clone() in config.rs - Add todo item for caching config in daemon hot paths
* Fix shuffle to not shuffle current track - only shuffle tracks after current ↵salmonik2026-05-101-10/+7
| | | | position
* Fix album shuffle - shuffle tracks when adding in album modesalmonik2026-05-101-31/+14
|
* Add shuffle restore tests, remove debug prints, update TODOsalmonik2026-05-101-5/+17
|
* Fix queue display returning nothing - removed daemon pager, return full ↵salmonik2026-05-103-48/+43
| | | | output instead. Increase pre-buffer to 100 packets.
* Fix shuffle restore - track played tracks via shuffled_indices, not positionsalmonik2026-05-091-8/+21
|
* Fix shuffle none - keep played tracks in placesalmonik2026-05-091-4/+15
|
* Fix buffer underrun - pre-decode samples before playbacksalmonik2026-05-092-5/+35
|
* Major rewrite: play command, queue display, and shuffle modessalmonik2026-05-093-14/+96
| | | | | | | | - Play command: no args queues to end (play only if queue empty + player playing), -i inserts after current and skips, -n inserts after current, removed -l flag - Queue display: detect terminal size, use pager only if queue exceeds terminal rows - Shuffle modes: always remember original queue, restore on 'shuffle none', album shuffle shuffles within each album's range separately
* Pad queue display numbers with leading zerossalmonik2026-05-082-5/+6
| | | | | | display_string now takes a total parameter to compute the zero-padding width. Queue positions are formatted as 01, 02, ..., 10 instead of 1, 2, ..., 10, keeping columns aligned.
* Fix shuffle first song not being shuffledsalmonik2026-05-082-4/+5
| | | | | | | | | | | update_shuffle_indices now shuffles all indices when position is 0 (no tracks have been played yet), so the first track played is random instead of always being tracks[0]. Directory playback now uses q.current() to pick the first track, resolving through shuffled indices when shuffle is active. Also pins notify-rust version in Cargo.toml and removes PLAN.md (superseded by TODO.md).
* Add desktop notifications for track changes, queue end, and errorssalmonik2026-05-085-3/+63
| | | | | Uses notify-rust to send D-Bus desktop notifications from the daemon when tracks change, the queue empties, or audio errors occur.
* Extract queue module, add comprehensive tests, fix queue/play bugssalmonik2026-05-084-304/+328
| | | | • Moved Queue, Track, ShuffleMode, AudioMetadata from daemon.rs into new src/queue.rs module with public API\n• Fixed rsp play <file> interrupting active playback (now checks is_playing)\n• Fixed directory play -n/-i inserting files in reverse order (now uses .iter().rev())\n• Removed dead duplicate shuffle handler in process_command\n• Fixed queue display showing (playing) when playback is stopped\n• Added 34 tests covering navigation, shuffle, insert ordering, edge cases, display
* Fix queue bugs: play -i on empty queue, stale track replay after queue ends, ↵salmonik2026-05-071-8/+24
| | | | | | | | | shuffle preserving current position - insert_after_current: guard against panic on empty queue - play -i (now): skip position increment when queue was empty so track plays - directory last: use audio.is_playing() instead of q.current() to avoid replaying finished track - shuffle: only randomize tracks after current position
* Add toggle command to resume/pause playback and fix queue display bugsalmonik2026-05-062-1/+19
| | | | | | - Add 'rsp toggle' command to toggle between play and pause - Fix queue display showing wrong track as playing when shuffle is enabled - Update shell completion scripts for new toggle command
* Add install script, shell completions, and systemd servicesalmonik2026-05-062-2/+2
| | | | | | | | | - Add install.sh script that builds release, stops daemon, and installs binary - Add shell completions for bash, zsh, and fish - Add systemd user service unit file - Add public binary declaration in Cargo.toml - Add install command to CLI - Make current_track field public for MPRIS integration (placeholder)
* Add unit tests in /tests directory for config, database, playback, and ↵salmonik2026-05-055-12/+21
| | | | scrobbler modules
* Add dev/release config separation and volume query commandsalmonik2026-05-053-6/+25
|
* Add flexible play command with position flagssalmonik2026-05-052-18/+105
| | | | | | | | | | | | | - Add -i/--now, -n/--next, -l/--last flags to play command: - 'play MUSIC' (default) adds to end of queue and plays - 'play -i MUSIC' inserts after current and skips to it - 'play -n MUSIC' inserts after current, doesn't skip - 'play -l MUSIC' adds to end of queue (default behavior) - Add insert_after_current and track_at methods to Queue in daemon - Update play command handler to handle position arguments - Fix queue display to correctly show playing track (compare track_idx instead of display_idx with current_position)
* Add metadata extraction and display for folder playbacksalmonik2026-05-051-11/+126
| | | | | | Extract ID3/metadata tags from audio files using symphonia and display as 'INDEX. ARTIST - TITLE' format, falling back to filename. Only shows the track number before any slash (e.g., '15' from '15/19').
* fix(audio): resolve deadlock preventing auto-advance to next tracksalmonik2026-05-052-11/+50
| | | | | | | | The audio callback deadlocked when trying to lock audio_data twice, preventing track_ended from being set and breaking auto-advance. Also removed erroneous track_ended.store(true) calls from error paths that were causing incorrect queue advancement when playback failed.
* fix(daemon): robust auto-advance; ensure next track starts even if playback ↵salmonik2026-05-058-0/+1841
fails