@page "/tracks" @using System.Net @using DeepDrftManager.Services @attribute [Authorize] @inject ICmsTrackService CmsTrackService @inject IDialogService DialogService @inject ISnackbar Snackbar @inject ILogger Logger Tracks — DeepDrft CMS Tracks Waveform Pre-Processing Add Track No tracks found. Loading tracks… Track Name Artist Album Genre Release Date Entry Key Actions @context.TrackName @context.Artist @(context.Album ?? "—") @(context.Genre ?? "—") @(context.ReleaseDate?.ToString("yyyy-MM-dd") ?? "—") @context.EntryKey @code { private MudTable? _table; private async Task> LoadServerData(TableState state, CancellationToken cancellationToken) { var pageNumber = state.Page + 1; // MudTable is 0-based, service is 1-based. var sortColumn = string.IsNullOrEmpty(state.SortLabel) ? "TrackName" : state.SortLabel; var sortDescending = state.SortDirection == SortDirection.Descending; var result = await CmsTrackService.GetPagedAsync(pageNumber, state.PageSize, sortColumn, sortDescending, cancellationToken); if (!result.Success || result.Value is null) { var errorText = result.Messages.FirstOrDefault()?.Message ?? "Unknown error"; Snackbar.Add($"Failed to load tracks: {errorText}", Severity.Error); return new TableData { Items = Array.Empty(), TotalItems = 0 }; } var page = result.Value; return new TableData { Items = page.Items, TotalItems = page.TotalCount }; } private async Task ConfirmAndDelete(TrackDto track) { var confirmed = await DialogService.ShowMessageBox( title: "Delete track", markupMessage: new MarkupString($"Delete {WebUtility.HtmlEncode(track.TrackName)} by {WebUtility.HtmlEncode(track.Artist)}? This removes both the metadata row and the underlying audio entry."), yesText: "Delete", cancelText: "Cancel"); if (confirmed != true) return; try { var result = await CmsTrackService.DeleteTrackAsync(track.Id); if (result.Success) { Snackbar.Add($"Deleted '{track.TrackName}'.", Severity.Success); if (_table is not null) await _table.ReloadServerData(); } else { var error = result.Messages.FirstOrDefault()?.Message ?? "Unknown error"; Snackbar.Add($"Delete failed: {error}", Severity.Error); } } catch (Exception ex) { Logger.LogError(ex, "Delete failed for track {TrackId}", track.Id); Snackbar.Add("Delete failed — please try again.", Severity.Error); } } }