Repository navigation
spotify-cli v0.1.2
CLI:
spotify search queenand other searches whose results hold a line break work again:
spotify_player output with raw control characters inside strings now parses. When output still
cannot be parsed,spotify_player_failedsays whether it was malformed JSON or plain text, with
the command, stdout and parse error indetails.spotify track <album>shows the album type, release date, track count, length and track list,
andspotify track <artist>its top tracks, albums and singles and related artists, instead of
an empty template.--jsonaddskind,itemand those lists next toraw; album items gain
album_type.- Spotify references are checked before anything is sent to Spotify: ids must be 22 letters and
digits, and playlist commands take only playlists. Anything else isinvalid_input(exit 2)
with the accepted forms in the hint.playlist add/removecheck every item first, so an edit
never stops half way (episodes areunsupported). Spotify's "400 Bad Request" is
invalid_inputinstead ofspotify_player_failed. - Limits that cannot be honoured are refused instead of quietly changed:
search --limitand
podcast search --limittake 1–10 (spotify_player returns at most 10 per kind), as does the
search_limitsetting (a larger value saved by an earlier release is applied as 10, with a note);
library --limitandplaylist list --limittake 1 or more;trigger history --limit1–500. spotify trigger addrejects--times 0, a note over 1000 or a label over 80 characters, a
percentage outside 0–100% and a--trackthat is not a track or episode asinvalid_input
(exit 2) before reading Spotify, whatever is playing (was an Automation or Spotify error).spotify config seterrors name the key and what it accepts, with a copyable example, e.g.
verify_timeout_ms must be an integer from 200 to 15000, not "fast".Setting one key no longer
fails because another saved key is out of range.- Usage errors keep clap's details in
--json: the missing arguments,Possible values: …
(details.possible_values), tips and the usage line (details.usage). spotify queue add --typeoffers onlytrackandepisode.- New
spotify playlist fork --name <NAME>.playlist create --jsonreturns the bareidand
uri(spotify_player 0.25 gavespotify:playlist:spotify:playlist:…);playlist fork --json
also returns the new playlist'sid,uriandname.playlist createwithout
--description, or with a name starting with-, works. spotify doctorasks the backend for its version and adds the required check
cli_version_supportedwhen the backend names amin_cli.playlist showsays "1 track" / "N tracks". Help examples fit in 100 columns, so the
spotify loginpipe example andspotify report --prno longer wrap mid-command.
Daemon:
- The macOS Automation state now comes from what Apple Events actually do.
automation_permission_pendingis gone: while macOS's dialog is open, commands fail with
timeoutwhose hint names the dialog, and after one timeout the daemon fails fast for 3 s,
including commands already waiting, instead of stacking up. A reading that finds Spotify closed
no longer counts asgranted;spotify doctorshows anunknownstate as optional with a fix,
and waits out the 3 s window so it really re-checks. In the daemon's first two minutes a closed
Spotify is polled every 3 s until the first Apple Event reaches it. A denied permission no longer
waits 20 s for a launching Spotify. - Telemetry is relayed in requests under the backend's 64 KiB limit instead of 40-event batches
that could exceed it and be dropped. - Daemon ops refuse search and history limits they cannot honour, for every client, and
track.inforeturns the structured album/artist view itself.
Backend:
- Every error, including 405
method_not_allowedand 413payload_too_large(bodies over
512 KiB), is the JSON envelope with anX-Request-Idand a non-empty hint. POST /api/v1/auth/logoutanswers 204 for tokens IAM does not recognise (was 503).- A refused SLT is 401
slt_rejectedwith advice about the SLT; a refused refresh token is 401
unauthenticated; a plain IAM 400 isinvalid_input(was 503dependency_unavailable). - Telemetry batches over 64 KiB get 413
payload_too_largeinstead of being dropped silently. - A malformed bearer is 401
unauthenticatedbeforeX-Org-IDis checked. - IAM webhook deliveries that fail verification get
webhook_unverified, and the reason is
logged.
Installer and website:
- The installer adds its PATH line under
# spotify-cliunless that exact line is already there
(older# silicon-spotifyblocks count); another install directory gets its own line. Its closing
lines ask you to click Allow only while Automation is not granted, and print the System
Settings path when it was denied. The Honeycomb post-install says the same. - The docs have a search box (press
/), code blocks have a header strip whose Copy button no
longer covers code, and page summaries are whole sentences. Website analytics are off under
Global Privacy Control or Do Not Track, and the footer says what is collected. - Docs: a Concepts glossary, installer options and uninstall steps, every error code with its
exit code, and atccutilreset scoped to spotify-daemon.