Skip to content

feat: music dialog lists (Up next, Recent, Playlists, Devices) - #52

Merged
NovusEdge merged 14 commits into
mainfrom
feat/music-lists
Oct 13, 2026
Merged

NovusEdge merged 14 commits into
mainfrom
feat/music-lists

Conversation

@NovusEdge

@NovusEdge NovusEdge commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

Fourth of four PRs for the music player: the lists in the music dialog, for a connected Spotify.

  • The dialog's right column has four lists on 1–4: Up next, Recent, Playlists and Devices. Enter on a row plays it; nothing else starts playback (switching lists, opening, reloads and errors never do).
  • Up next skips to the picked track by sending Next until it plays. The queue is re-read on each press, one skip runs at a time ("Still reading the queue, try again."), and a track 20 or more places down is refused ("That track is too far down the queue.") instead of landing on another one.
  • Recent replays a track inside its album or playlist; other contexts play the track alone. Local files are left out. Playlists loads every page (20 at most). Devices transfers playback; it opens with no preselected row, so opening the list can't trigger a transfer.
  • When nothing is active the dialog opens on Devices, and a NO_ACTIVE_DEVICE answer switches to it.
  • A list reloads every 15 s while it is shown, and only then. Loading… shows only before the first rows; a failed reload keeps the rows and adds one line. Lists reset when the dialog closes, on /clear, on reconnect and on disconnect.
  • List commands run only through the Web API. A failure says why inline; PREMIUM_REQUIRED says "Spotify needs Premium for this."

Not checked live: every list needs a Spotify connection, which needs a developer app (#51 has the checklist, including whether the engine draws the list as a list at 88 columns).

Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
…nt tracks, playlists and devices

The dialog's lists load on a 5 s timer while it shows, reset on close, /clear,
Reconnect and disconnect, and a write answering NO_ACTIVE_DEVICE switches to
Devices. A skip that finds its track gone says the spec's sentence, "That track
already left the queue."

Signed-off-by: NovusEdge <novusedge0@gmail.com>
Enter on a Recent, Playlists or Devices row that fails on a 5xx, a 429 or
no answer now shows the list's reason inline instead of nothing, and a
PREMIUM_REQUIRED on one no longer runs the local app, which has no form of
these commands. Tests cover a late list answer after disconnect and connect,
a 401 during a list load, and the list timer stopping on close.

Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
@NovusEdge NovusEdge self-assigned this Oct 13, 2026
@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 25 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: c65e2913-84d6-436c-bab8-e5ac76e0eff2
📥 Commits

Reviewing files that changed from the base of the PR and between c82bb59 and 710f383.

📒 Files selected for processing (18)
  • .docket/ledger.jsonl
  • CHANGELOG.md
  • docs/layout.md
  • docs/spotify.md
  • hooks/music/lists.ts
  • hooks/music/parse.ts
  • hooks/music/player.ts
  • hooks/music/spotify.ts
  • hooks/music/webapi.ts
  • hooks/musicplayer.tsx
  • hooks/register.tsx
  • test/music-lists.test.ts
  • test/music-player.test.ts
  • test/music-spotify.test.ts
  • test/music-webapi.test.ts
  • test/musicplayer.test.ts
  • test/spotify-lists-wiring.test.ts
  • test/spotify-wiring.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
@NovusEdge
NovusEdge marked this pull request as ready for review October 13, 2026 11:37
@NovusEdge
NovusEdge merged commit a04dd65 into main Oct 13, 2026
7 checks passed
@NovusEdge
NovusEdge deleted the feat/music-lists branch October 13, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant