diff options
| author | Craig Jennings <c@cjennings.net> | 2026-07-06 13:20:52 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-07-06 13:20:52 -0500 |
| commit | c60c8edf2e0e4dcdaab451d630b05d7df583bad6 (patch) | |
| tree | b1b88aee50663119986e19d1ae29d928e536ca77 /themes | |
| parent | ba1c418428f9d09f57736d66e61ae28974a91117 (diff) | |
| download | dotemacs-c60c8edf2e0e4dcdaab451d630b05d7df583bad6.tar.gz dotemacs-c60c8edf2e0e4dcdaab451d630b05d7df583bad6.zip | |
feat(music): radio-browser search client + emitter (phase 1)
I built the first phase of the radio-browser lookup: the pure pieces and the network client behind the search command, with no UI yet. It lives in modules/music-config.el, alongside the existing radio-station creator.
The client is url.el plus json-parse-string, trying a pinned host and falling back to one from /json/servers. The pure layer parses a response into station plists, and a non-JSON body signals a clear user-error rather than a stack trace. It picks a station's stream URL (url_resolved, then url), emits the .m3u in the existing radio format with the radio-browser UUID, formats the completion annotation (codec, bitrate, country, votes, tags), and disambiguates a colliding filename by UUID. Names are newline-stripped so an odd one can't inject extra m3u lines.
The pure pieces are unit-tested (14). The network client is smoke-tested against the live API.
Diffstat (limited to 'themes')
0 files changed, 0 insertions, 0 deletions
