fix(qt): "Play all next" enqueues the artist instead of replacing the queue

The artist ⋯ menu offers "Play all next", "Add all to queue" and "Shuffle
all". The first was wired to `playArtistTop(false)` — which the bridge's own
doc calls "Play all": it REPLACES the queue and starts playing. There is no
plain "Play all" row in that menu, so there was no way to get the intended
behaviour, and asking to queue an artist next wiped whatever was queued.

The invokable takes a mode now and both rows route through the shared
insertion funnel: "next" inserts at the cursor, "queue" appends. That is
what the reference does (`enqueue_artist_top_selected(.., next: true)`) and
what `playback_qt::enqueue_artist_top_mode` was written for — it had no
caller at all, which is how the miswiring survived.

cc
This commit is contained in:
vicrodh committed 2026-08-16 18:56:38 -06:00
1 parent dc2496e5c0
commit 1f636679d5
3 files changed
+28 -11

No files matched your search

+8 -2
View File
@@ -3418,8 +3418,14 @@ Rectangle {
topMenu.close()
var a = modelData.action
if (a === "shuffle-all") QbzPlayer.playArtistTop(true)
else if (a === "next-all") QbzPlayer.playArtistTop(false)
else if (a === "queue-all") QbzPlayer.enqueueArtistTop()
// "Play all next" INSERTS at the cursor; it does
// not replay the artist. It used to call
// playArtistTop(false) — "Play all" — so the row
// labelled "next" wiped the queue and started
// over (ArtistPageView's twin in Slint enqueues,
// main.rs:15301).
else if (a === "next-all") QbzPlayer.enqueueArtistTop("next")
else if (a === "queue-all") QbzPlayer.enqueueArtistTop("queue")
else if (a === "playlist-all") {
// ArtistPageView.slint:797-802
// `top-tracks-menu-action("playlist-all")` —