feat(queue): Play later everywhere — every context menu and bulk bar (#442)

Extends Play later (end of the manual block) from track rows to every
surface that already offered Play next / Add to queue:

- playback.rs: enqueue_album_later, enqueue_playlist_later (mixed
  sidecar interleave), enqueue_artist_top_later, enqueue_tracks_later,
  enqueue_local_tracks_later — all NATURAL order (each add_track_later
  appends, no reverse), QConnect controller routing via
  play_later_batch_on_peer_if_active, and post-add queue sync.
- local_playlist::enqueue_later_by_id (source-aware rows, offline-only
  stamp preserved), myqbz_play RowMode::PlayLater + BulkEnqueueMode.
- 19 dispatch arms in main.rs (album/playlist/artist/label/mix/
  favorites/local-library/album-page/disc/myqbz dialects).
- 12 context menus + 10 bulk bars in .slint: list-plus icon between
  Play next and Add to queue, popup heights bumped.

The immersive tap-action dropdown is deliberately untouched (it is a
configurable single-tap behavior setting, not a context menu).

km
This commit is contained in:
vicrodh committed 2026-07-26 21:08:12 -06:00
1 parent 09380d4634
commit ad6c98ff7d
22 files changed
+785 -92

No files matched your search

+10 -3
View File
@@ -79,7 +79,7 @@ export component TrackCard inherits Rectangle {
animate opacity { duration: 250ms; }
callback clicked(string);
// kind ("track"), track id, action ("play" | "queue" | "play-next" |
// "favorite" | "open").
// "play-later" | "favorite" | "open").
callback media-action(string, string, string);
in property <length> card-height: 246px;
@@ -202,8 +202,8 @@ export component TrackCard inherits Rectangle {
x: 26px;
y: 56px;
width: 196px;
// Play / Play-next / Queue / Go-to-artist / Go-to-album / favorite.
height: 6 * 33px + 10px;
// Play / Play-next / Play-later / Queue / Go-to-artist / Go-to-album / favorite.
height: 7 * 33px + 10px;
ContextMenu {
ContextMenuItem {
icon: @image-url("../assets/icons/play.svg");
@@ -219,6 +219,13 @@ export component TrackCard inherits Rectangle {
root.media-action("track", root.track.id, "play-next");
}
}
ContextMenuItem {
icon: @image-url("../assets/icons/list-plus.svg");
label: @tr("Play later");
clicked => {
root.media-action("track", root.track.id, "play-later");
}
}
ContextMenuItem {
icon: @image-url("../assets/icons/list-end.svg");
label: @tr("Add to queue");