using Microsoft.AspNetCore.Components.Forms; namespace DeepDrftManager.Components.Pages.Tracks; /// /// A single track row shared by BatchUpload (all rows are new uploads) and /// BatchEdit (existing rows carry ; admins may also add new upload rows). /// public class BatchRowModel { /// SQL id of an existing track. null means a new row to upload. public long? Id { get; set; } /// Vault entry key — existing rows only. public string? EntryKey { get; set; } /// Original upload filename — existing rows only, read-only display. public string? OriginalFileName { get; set; } /// Selected WAV — new rows only. public IBrowserFile? WavFile { get; set; } public string TrackName { get; set; } = string.Empty; public int TrackNumber { get; set; } public BatchRowStatus Status { get; set; } = BatchRowStatus.Queued; public string? ErrorMessage { get; set; } /// Bytes pushed to the wire so far for this row's in-flight upload. Reset per attempt. public long UploadedBytes { get; set; } /// Total payload bytes for this row (the WAV file size), the progress denominator. public long TotalBytes { get; set; } /// Upload completion as a 0–100 percent, or 0 when the total is unknown. public int UploadPercent => TotalBytes > 0 ? (int)Math.Clamp(UploadedBytes * 100 / TotalBytes, 0, 100) : 0; } public enum BatchRowStatus { Queued, Uploading, Done, Failed }