Commit Graph
13 Commits
Author SHA1 Message Date
beefcarver 43ddd8666b feat(palette): sixteen ANSI colour ladders, cycled with c 2026-11-04 08:55:51 -05:00
beefcarver 253b462df1 chore(release): 1.0.0 2026-11-03 20:38:34 -05:00
beefcarver 5eb60d378c feat(catalogue): tune a single-station catalogue on switch 2026-11-03 20:31:18 -05:00
beefcarver 0219df454c feat(ui): draw pane frames, page keys and a scroll thumb 2026-11-03 20:25:02 -05:00
beefcarver 49f7efe0d2 feat(providers): add nine catalogues and the Radio Browser directory 2026-11-03 20:24:53 -05:00
beefcarver a3ad693132 fix(ui): keep the catalogue picker title and hint apart 2026-11-03 18:44:57 -05:00
beefcarver e14a349c2d fix(artwork): letterbox images and back alpha art with black 2026-11-03 18:44:47 -05:00
beefcarver 50a9a735f7 feat(bassdrive): add the drum & bass relay and a shared wordmark font 2026-11-03 18:44:40 -05:00
beefcarver ba114599d0 fix(stage): name the presenter instead of a lone artwork glyph 2026-11-03 17:51:29 -05:00
beefcarver b31ad3f6fb feat(ui): add catalogue picker, schedule pane and per-provider hero 2026-11-03 17:51:27 -05:00
beefcarver 058d336a2c feat(tilderadio): add the tildeverse community stream as a catalogue 2026-11-03 17:51:23 -05:00
beefcarver c4cc91ee1a feat(providers): add a pluggable station-catalogue seam
The app now holds one RadioProvider and asks it for stations, song history and stream URLs instead of importing SomaFM's HTTP client directly.

- models.py: provider-neutral Song/Station plus the shared parsers every catalogue needs (Station.provider/.uid keep ids unique once there is more than one).
- providers/base.py: the RadioProvider interface and the toolkit it needs in practice - httpx client factory, .pls/.m3u resolution with an 8h disk cache, and a default stream_candidates() strategy.
- providers/somafm/: everything SomaFM-specific (channels.json, songs/<id>.json, PLS layout, guessed icecast mirrors) behind SomaFMProvider.
- providers/__init__.py: registry, get_provider() and --provider, remembered in the config file.

Widgets render branding, splash copy and the help credits from the active provider, so a second catalogue needs no UI changes; with SomaFM selected the screen is byte-identical to before.
2026-11-03 16:10:30 -05:00
beefcarver e30ca09627 refactor!: rename somafm-tui to beefy-player
The app is now a general internet-radio player rather than a SomaFM client, so the package, console script, MPRIS identity, mpv namespaces, macOS tap names, XDG directories and docs all move to beefy-player.

Environment variables are now BEEFY_* (the old SOMAFM_* spellings are still honoured) and an existing ~/.config/somafm-tui/config.json is migrated on first run, so favourites and volume survive the rename.

The visible interface is untouched: same layout, same logo, same keys.
2026-11-03 16:10:25 -05:00