crabidy/crabidy-server/src
Test User 7091d37c32 Add the SoundCloud provider (`/soundcloud`) with HLS playback
New `soundclouddy` crate mounted at `/soundcloud`: search tracks and
playlists, resolve permalink URLs, and — with an optional OAuth token — the
user's likes and playlists (public browse/play needs only a client_id). Ran the
full dev-flow: architecture/soundcloud-provider.md, quality/soundcloud-provider.md,
plan/soundcloud.md, plan/summary.md.

- Provider logic over an `Sc` reqwest seam (faked in tests): creatable
  `search`/`resolve` parents, canonical `track/<id>` and `playlist/<id>`
  leaves, playlist hydration, download blessing — mirrors abs/fyyd.
- Auth: `client_id` from config or scraped from soundcloud.com (pure parsers,
  unit-tested), re-scraped once on 401; scraped id persisted via `settings()`.
- Playback: a new `HlsStream` SourceStream in audio-player streams the m3u8's
  mp3 segments in order as one continuous mp3; `open_source` routes `.m3u8` to
  it, non-seekable so symphonia never end-seeks a length-less stream.
- Wired into crabidy-server the standard way (settings toggle, sc_owns/
  sc_provider, non-fatal build block, root child, dispatch arms).

Verified offline: soundclouddy 19 tests, audio-player 14 (incl. HLS-parser),
crabidy-server 77+4 — all green; fmt/clippy/machete clean. The live client_id
scrape, real JSON shapes, and mp3-HLS play-to-EOS need real SoundCloud access
and are covered by tests/live.rs + #[ignore] gates (quality G7/G8/G14/G19).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 02:27:10 +02:00
..
auth.rs Auth: anonymous callers inherit the highest unguarded role 2026-07-23 16:06:01 +02:00
capture.rs Implement the crabidy content store and single /crabidy provider 2026-07-22 11:34:40 +02:00
cli.rs Audio: let `audio-devices <device>` write the config 2026-07-23 22:44:46 +02:00
crabidy_store.rs Add the /orphans provider: a store garbage-collection view 2026-07-22 22:47:23 +02:00
lib.rs Audio: select the output device (fixes silent output on Raspberry Pi) 2026-07-23 20:13:23 +02:00
main.rs Audio: let `audio-devices <device>` write the config 2026-07-23 22:44:46 +02:00
orphans.rs Add the /orphans provider: a store garbage-collection view 2026-07-22 22:47:23 +02:00
playback.rs Playback: play the current track when toggling/restarting from idle 2026-07-23 22:52:32 +02:00
provider.rs Add the SoundCloud provider (`/soundcloud`) with HLS playback 2026-07-24 02:27:10 +02:00
rpc.rs Web client: prompt for login on visit when auth is enabled 2026-07-23 17:51:55 +02:00
settings.rs Add the SoundCloud provider (`/soundcloud`) with HLS playback 2026-07-24 02:27:10 +02:00
spectrum.rs Make the spectrum bars actually visible 2026-07-22 00:00:58 +02:00
web.rs Add a Leptos web client served by the server 2026-07-21 22:43:06 +02:00