Files
deepdrft/DeepDrftManager/Components/Pages/Tracks/BatchRowModel.cs
T

49 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 0100 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 }