jamendo: send a User-Agent (Jamendo returns empty results without one)

Jamendo API v3.0 answers HTTP 200 success with an empty result set to
any request that carries no User-Agent header. reqwest sends none by
default, so every search/detail/stream call came back empty and tracks
would not resolve or play (jamendo resource not found). Set a UA on the
JamApi client, like the SoundCloud provider does. Live-verified against
the API: search, track detail, and stream-URL resolution all return data
with the header present.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Test User 2026-07-24 15:54:31 +02:00
parent 06381949ab
commit 7df5f0a1c2
2 changed files with 9 additions and 0 deletions

View File

@ -55,6 +55,11 @@ Objects (fields we read):
- **album**: `id`, `name`, `artist_name`; `/albums/tracks` returns the album
wrapping a `tracks[]` array of the same track shape.
**A `User-Agent` header is mandatory** (live-discovered 2026-07-24): Jamendo's
API returns HTTP 200 `success` with an **empty** result set to any request that
carries none — and `reqwest` sends none by default — so `JamApi` sets one. This
is silent (no error), so a missing UA looks exactly like "no matches".
Search parameters: `search` (free text across track/album/artist/tags),
`namesearch` (name match), `tags` (AND) / `fuzzytags` (fuzzy OR),
`order` (relevance, popularity, downloads, listens, releasedate, …). v1 uses

View File

@ -127,6 +127,10 @@ impl JamApi {
) -> Result<Self, FetchError> {
let http = reqwest::Client::builder()
.timeout(timeout)
// Jamendo's API silently returns HTTP 200 with an empty result set
// (results_count: 0) to requests that carry no User-Agent — reqwest
// sends none by default — so a UA is mandatory, not cosmetic.
.user_agent(concat!("Mozilla/5.0 crabidy/", env!("CARGO_PKG_VERSION")))
.build()
.map_err(|err| FetchError::Http(err.to_string()))?;
Ok(Self {