@using Butter.Dtos.Jobs @using Butter.Types @using MilkStream.Services @inject JobsService JobsService
@switch (Job.JobType) { case EJobType.FileSystemScan: break; case EJobType.ThumbnailGeneration: break; case EJobType.PreviewGeneration: break; case EJobType.MetadataExtraction: break; case EJobType.IntegrityCheck: break; } @Job.Name @Job.Status
@(Job.Progress*100)%

@switch (Job.Status) { case EJobStatus.Queued: @Job.Created.ToLocalTime().ToString("g")

@(DateTime.Now - Job.Created.ToLocalTime())

break; case EJobStatus.Running: case EJobStatus.Waiting: @Job.Started?.ToLocalTime().ToString("g")

@(DateTime.Now - Job.Started?.ToLocalTime())

break; case EJobStatus.Completed: case EJobStatus.Canceled: case EJobStatus.Failed: @Job.Finished?.ToLocalTime().ToString("g")

@(Job.Finished?.ToLocalTime() - Job.Started?.ToLocalTime())

break; }

@Job.Message
@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); }