15 Commits

Author SHA1 Message Date
d17ea748f6 Bump version to 0.2.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
v0.2.0
2026-01-28 00:15:01 +00:00
fb0786122e Extract built-in theme data from theme.rs into theme_builtins.rs
Moves ~265 lines of TOML theme constant data to a dedicated file,
reducing theme.rs from 553 to ~290 lines of logic.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 00:07:29 +00:00
763e9bc8db Split mouse.rs into page-specific handler files
Extract handle_artists_click and handle_playlists_click into
mouse_artists.rs and mouse_playlists.rs respectively, reducing
mouse.rs from ~530 to ~247 lines.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 00:03:41 +00:00
112f18582a Fix all 16 clippy warnings
- Collapse else { if } blocks into else if (6 instances)
- Replace map_or(false, ...) with is_some_and(...) (6 instances)
- Replace iter().cloned().collect() with .to_vec() (2 instances)
- Replace manual char comparison with array pattern (1 instance)
- Replace useless vec! with array literal (1 instance)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:58:18 +00:00
766614f5e9 Remove dead code and #![allow(dead_code)] blanket suppressions
- Delete src/audio/queue.rs (321 lines, PlayQueue never used)
- Remove #![allow(dead_code)] from audio, subsonic, and mpris module roots
- Remove unused MpvEvent2 enum, playlist_clear, get_volume, get_path,
  is_eof, observe_property from mpv.rs
- Remove unused DEFAULT_DEVICE_ID, is_available, get_effective_rate
  from pipewire.rs (and associated dead test)
- Remove unused search(), get_cover_art_url() from subsonic client
- Remove unused SearchResult3Data, SearchResult3 model structs
- Move parse_song_id_from_url into #[cfg(test)] block (only used by tests)
- Add targeted #[allow(dead_code)] on deserialization-only fields
  (MpvEvent, SubsonicResponseInner.version, ArtistIndex.name)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:56:52 +00:00
7582937439 Add missing tempfile dev-dependency for config tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:44:01 +00:00
b94c12a301 Refactor app/mod.rs into focused submodules
Split the 2495-line mod.rs into 10 files by concern:
- playback.rs: playback controls and track management
- cava.rs: cava process management and VT100 parsing
- input.rs: event dispatch and global keybindings
- input_artists.rs: artists page keyboard handling
- input_queue.rs: queue page keyboard handling
- input_playlists.rs: playlists page keyboard handling
- input_server.rs: server page keyboard handling
- input_settings.rs: settings page keyboard handling
- mouse.rs: all mouse click and scroll handling
- mod.rs: App struct, new(), run(), event_loop(), load_initial_data()

Pure code reorganization — no behavioral changes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:41:43 +00:00
bd8f8e6302 Switch install script and README URLs to GitHub
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
v0.1.0
2026-01-27 22:24:10 +00:00
db7dc8dac0 Only highlight selected item in focused pane
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 22:20:34 +00:00
4bc7bb198d Move cava prompt before build step in install script
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:58:44 +00:00
ee688d4086 Fix install script: read cava prompt from terminal, not stdin pipe
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:57:55 +00:00
b7d87c533a Add optional cava install prompt to install script
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:55:36 +00:00
cb5b29e924 Add one-line install script and simplify README installation section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:51:35 +00:00
c4e4da4f59 Add screenshot to README
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:48:46 +00:00
12cc70e6ec Initial commit — ferrosonic terminal Subsonic client
Terminal-based Subsonic music client in Rust featuring bit-perfect audio
playback via PipeWire sample rate switching, gapless playback, MPRIS2
desktop integration, cava audio visualizer with theme-matched gradients,
13 built-in color themes with custom TOML theme support, mouse controls,
artist/album browser, playlist support, and play queue management.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 21:43:26 +00:00