49 lines
2.1 KiB
C#
49 lines
2.1 KiB
C#
using Microsoft.AspNetCore.Components.Forms;
|
||
|
||
namespace DeepDrftManager.Components.Pages.Tracks;
|
||
|
||
/// <summary>
|
||
/// A single track row shared by <c>BatchUpload</c> (all rows are new uploads) and
|
||
/// <c>BatchEdit</c> (existing rows carry <see cref="Id"/>; admins may also add new upload rows).
|
||
/// </summary>
|
||
public class BatchRowModel
|
||
{
|
||
/// <summary>SQL id of an existing track. <c>null</c> means a new row to upload.</summary>
|
||
public long? Id { get; set; }
|
||
|
||
/// <summary>Vault entry key — existing rows only.</summary>
|
||
public string? EntryKey { get; set; }
|
||
|
||
/// <summary>Original upload filename — existing rows only, read-only display.</summary>
|
||
public string? OriginalFileName { get; set; }
|
||
|
||
/// <summary>Selected WAV — new rows only.</summary>
|
||
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; }
|
||
|
||
/// <summary>Bytes pushed to the wire so far for this row's in-flight upload. Reset per attempt.</summary>
|
||
public long UploadedBytes { get; set; }
|
||
|
||
/// <summary>Total payload bytes for this row (the WAV file size), the progress denominator.</summary>
|
||
public long TotalBytes { get; set; }
|
||
|
||
/// <summary>Upload completion as a 0–100 percent, or 0 when the total is unknown.</summary>
|
||
public int UploadPercent => TotalBytes > 0
|
||
? (int)Math.Clamp(UploadedBytes * 100 / TotalBytes, 0, 100)
|
||
: 0;
|
||
}
|
||
|
||
// Done is the terminal success state (track persisted + playable losslessly). PostProcessing is the
|
||
// visible third upload phase (§3.1a): the byte transfer and server persist are finished and the track is
|
||
// live, but the server-side background Opus transcode is still running. It is NOT a failure and never
|
||
// blocks completion — the form may navigate away while a row sits in PostProcessing; the Releases browse
|
||
// view polls the durable Opus status from there.
|
||
public enum BatchRowStatus { Queued, Uploading, PostProcessing, Done, Failed }
|