86 lines
4.0 KiB
Plaintext
86 lines
4.0 KiB
Plaintext
@using Butter.Dtos.Jobs
|
|
@using Butter.Types
|
|
@using MilkStream.Services
|
|
@inject JobsService JobsService
|
|
|
|
<div class="card m-2 @BorderColor h-100">
|
|
<div class="card-header h-100">
|
|
@switch (Job.JobType) {
|
|
case EJobType.FileSystemScan: <i class="me-2 bi bi-folder2-open"></i> break;
|
|
case EJobType.ThumbnailGeneration: <i class="me-2 bi bi-pip"></i> break;
|
|
case EJobType.PreviewGeneration: <i class="me-2 bi bi-file-image"></i> break;
|
|
case EJobType.MetadataExtraction: <i class="me-2 bi bi-file-earmark-break"></i> break;
|
|
case EJobType.IntegrityCheck: <i class="me-2 bi bi-file-earmark-check"></i> break;
|
|
}
|
|
@Job.Name <span class="badge @TextColor">@Job.Status</span>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="progress mb-2" role="progressbar">
|
|
<div class="@BgColor" style="width: @(Job.Progress*100)%">@(Job.Progress*100)%</div>
|
|
</div>
|
|
<p class="card-text"><i class="me-2 bi bi-stopwatch"></i>
|
|
@switch (Job.Status) {
|
|
case EJobStatus.Queued:
|
|
@Job.Created.ToLocalTime().ToString("g")
|
|
<p class="card-text"><i class="me-2 bi bi-hourglass-split"></i>@(DateTime.Now - Job.Created.ToLocalTime())</p>
|
|
break;
|
|
case EJobStatus.Running:
|
|
case EJobStatus.Waiting:
|
|
@Job.Started?.ToLocalTime().ToString("g")
|
|
<p class="card-text"><i class="me-2 bi bi-hourglass-split"></i>@(DateTime.Now - Job.Started?.ToLocalTime())</p>
|
|
break;
|
|
case EJobStatus.Completed:
|
|
case EJobStatus.Canceled:
|
|
case EJobStatus.Failed:
|
|
@Job.Finished?.ToLocalTime().ToString("g")
|
|
<p class="card-text"><i class="me-2 bi bi-hourglass-split"></i>@(Job.Finished?.ToLocalTime() - Job.Started?.ToLocalTime())</p>
|
|
break;
|
|
}
|
|
</p>
|
|
<button class="btn btn-sm btn-danger" @onclick="Cancel"><i class="bi bi-trash"></i></button>
|
|
|
|
<div class="accordion accordion-flush" id="@Job.Id">
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-@Job.Id" aria-expanded="false" aria-controls="flush-collapseOne">
|
|
Message:
|
|
</button>
|
|
</h2>
|
|
<div id="flush-@Job.Id" class="accordion-collapse collapse" data-bs-parent="#@Job.Id">
|
|
@Job.Message
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@code {
|
|
[Parameter] public required JobStatusDto Job { get; set; }
|
|
string BorderColor => Job.Status switch {
|
|
EJobStatus.Queued => "border-secondary",
|
|
EJobStatus.Running => "border-primary",
|
|
EJobStatus.Waiting => "border-info",
|
|
EJobStatus.Completed => "border-success",
|
|
EJobStatus.Failed => "border-danger",
|
|
_ => "border-dark",
|
|
};
|
|
string TextColor => Job.Status switch {
|
|
EJobStatus.Queued => "text-bg-secondary",
|
|
EJobStatus.Running => "text-bg-primary",
|
|
EJobStatus.Waiting => "text-bg-info",
|
|
EJobStatus.Completed => "text-bg-success",
|
|
EJobStatus.Failed => "text-bg-danger",
|
|
_ => "text-bg-dark",
|
|
};
|
|
string BgColor => Job.Status switch {
|
|
EJobStatus.Queued => "progress-bar text-bg-secondary",
|
|
EJobStatus.Running => "progress-bar text-bg-primary",
|
|
EJobStatus.Waiting => "progress-bar text-bg-info",
|
|
EJobStatus.Completed => "progress-bar text-bg-success",
|
|
EJobStatus.Failed => "progress-bar text-bg-danger",
|
|
_ => "progress-bar text-bg-dark",
|
|
};
|
|
|
|
public async Task Cancel() => await JobsService.CancelJob(Job);
|
|
} |