spec/85-spotify-source #92

Merged
SBDeveloper merged 20 commits from spec/85-spotify-source into main 2026-10-16 21:18:31 +02:00
Owner
No description provided.
New optional plugin plugins/optional/spotify, HTTP only. Pure JSON mapping and
request planning is unit-tested natively. PlaylistSummary gains read_only so
Spotify-owned playlists can be listed as read-only Linked Playlists.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
A Source with the spotify_engine capability can open the audio of a
Spotify URI through the host: SpotifyEngine trait in core (seam for a
second backend), librespot backend behind the off-by-default `librespot`
Cargo feature, passthrough Ogg via StreamInfo. Own consent line, refused
before consent, per-instance stream cap, open/stall timeouts, and a clear
"playback unavailable" when the build has no engine. Fixture plugin and
integration tests with a fake engine.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
- Optional build-time default Web API client ID (MEDLEY_SPOTIFY_CLIENT_ID),
  handed to the plugin as config "client_id"; bring-your-own is the default.
- Official workflows stay without librespot. New unofficial-v* tag builds a
  separately named pre-release with the librespot feature for Linux, Android,
  Windows and macOS; the unofficial build does not self-update.
- README Spotify section and legal notes, docs/development.md, ADR 0021 client ID.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Spawns only the user-configured Soloist in single-track mode, records its
output through a private null sink and hands it over as Wav. Default engine
selection prefers Soloist when configured, else librespot. Core API, Tauri
commands and a settings component for the path, pairing and help text.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The plugin builds its login page through a new optional login_url export
(core: Source::login_page, Core::loopback_login_url), signs in with PKCE
(spotify://callback for the Web API, Spotify's own client ID over the
loopback listener for playback), refreshes tokens, takes a pasted
soloist:<key>, client:<id> or callback URL, and streams through
spotify_engine with the Quality cap as bitrate. Premium is judged from
engine failures since the Web API no longer reports it.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Generalises the deezer-only protocol handling by scheme (core setting,
shell claim/owner probe, route_deep_links via is_login_callback), adds
the start_playback_login command over the loopback listener and a
Spotify settings section (client ID, Soloist key, playback login,
pasted address). Documents the credentials, AccountStatus mapping and
Quality cap.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Fix QR scanner
Some checks failed
Check / android (pull_request) Has been skipped
Check / rust (pull_request) Has been cancelled
Check / ui (pull_request) Has been cancelled
cac9660389
SBDeveloper deleted branch spec/85-spotify-source 2026-10-16 21:18:31 +02:00
Sign in to join this conversation.
No description provided.