214f708e65
Fixes five queue bugs: Playlist relabel, last-track-empties, dormant-seed-from-player on first add, immediate panel reactivity, and front/back deque semantics. Adds JumpTo for row jumps.
48 lines
1.9 KiB
Plaintext
48 lines
1.9 KiB
Plaintext
@namespace DeepDrftPublic.Client.Controls
|
|
@using DeepDrftModels.DTOs
|
|
@using DeepDrftPublic.Client.Services
|
|
|
|
@* Append-only "Add to Queue" affordance placed beside a play control. Add is NOT play: it calls the
|
|
cascaded IQueueService's Enqueue/EnqueueRange (which append to the END without disturbing current
|
|
playback; a first add into a dormant queue seeds the head from the externally-playing track when one
|
|
exists, then appends) — never PlayRelease/PlayTrack/Start/Select. Track mode (Track set) appends a
|
|
single track; release mode (ReleaseTracks set) appends the whole ordered list. Reads queue state from
|
|
the layout-level cascade (C1); owns no data fetch. *@
|
|
|
|
<MudTooltip Text="@Tooltip">
|
|
<MudIconButton Icon="@Icons.Material.Filled.PlaylistAdd"
|
|
Color="@Color"
|
|
Size="@Size"
|
|
Disabled="@(Queue is null || !RendererInfo.IsInteractive)"
|
|
OnClick="@AddToQueue" />
|
|
</MudTooltip>
|
|
|
|
@code {
|
|
[CascadingParameter] public IQueueService? Queue { get; set; }
|
|
|
|
/// <summary>Single track to append (track mode). Mutually exclusive with <see cref="ReleaseTracks"/>.</summary>
|
|
[Parameter] public TrackDto? Track { get; set; }
|
|
|
|
/// <summary>Ordered release tracks to append (release mode). Mutually exclusive with <see cref="Track"/>.</summary>
|
|
[Parameter] public IReadOnlyList<TrackDto>? ReleaseTracks { get; set; }
|
|
|
|
[Parameter] public Size Size { get; set; } = Size.Medium;
|
|
[Parameter] public Color Color { get; set; } = Color.Secondary;
|
|
|
|
private string Tooltip => ReleaseTracks is not null ? "Add release to queue" : "Add to queue";
|
|
|
|
private void AddToQueue()
|
|
{
|
|
if (Queue is null) return;
|
|
|
|
if (ReleaseTracks is not null)
|
|
{
|
|
Queue.EnqueueRange(ReleaseTracks);
|
|
}
|
|
else if (Track is not null)
|
|
{
|
|
Queue.Enqueue(Track);
|
|
}
|
|
}
|
|
}
|