Files
deepdrft/DeepDrftPublic.Client/Pages/FramePlayer.razor
T
daniel-c-harvey 760e9a1982
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m37s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m23s
fix: Adjust Spectrum Bar Colors
2026-06-09 06:23:23 -04:00

38 lines
1.6 KiB
Plaintext

@using DeepDrftModels.DTOs
@using DeepDrftPublic.Client.Controls.AudioPlayerBar
@using DeepDrftPublic.Client.Layout
@using DeepDrftPublic.Client.Services
@page "/FramePlayer"
@layout EmbedLayout
<AudioPlayerBar Fixed />
@code {
[CascadingParameter] public IStreamingPlayerService? PlayerService { get; set; }
[SupplyParameterFromQuery] public string? TrackEntryKey { get; set; }
[Inject] public required ITrackDataService TrackDataService { get; set; }
private string? _stagedKey;
protected override async Task OnParametersSetAsync()
{
if (PlayerService is null || string.IsNullOrWhiteSpace(TrackEntryKey)) return;
// OnParametersSetAsync can fire repeatedly (and once per render pass); only act when the
// key actually changes so we don't re-fetch on every parameter set.
if (TrackEntryKey == _stagedKey) return;
_stagedKey = TrackEntryKey;
var result = await TrackDataService.GetTrack(TrackEntryKey);
if (result.Success && result.Value is not null)
{
// Stage only — no audio context, no streaming. The browser blocks audio until a user
// gesture, so the embed shows the track ready and the first play click (handled in
// AudioPlayerBar) calls SelectTrackStreaming. This also keeps this pass free of JS
// interop, so it works whether it runs during prerender or after WASM is interactive.
await PlayerService.StageTrack(result.Value);
}
// On failure, leave the bar idle; a stream-level error surfaces via PlayerService.ErrorMessage.
}
}