public async Task <MediaEncodeProgressDto> GetEncodeProgressAsync(string jobName, IZeroBlob resultingFile) { var job = await _client.Jobs.GetAsync(_settings.ResourceGroup, _settings.AccountName, _settings.MediaServicesTransform, jobName); if (job == null) { return(new MediaEncodeProgressDto { Status = EncodeStatus.NotFound, ProgressPercentage = 0, Errors = "Not found" }); } var status = ConvertToEncodeStatus(job.State); var firstOutput = job.Outputs.FirstOrDefault() as JobOutputAsset; switch (status) { case EncodeStatus.Processing: return(new MediaEncodeProgressDto { Status = status, ProgressPercentage = firstOutput.Progress }); case EncodeStatus.Finished: var exists = await resultingFile.ExistsAsync(); var size = await resultingFile.GetSizeAsync(); if (exists && size < 1) { status = EncodeStatus.Copying; } return(new MediaEncodeProgressDto { Status = status }); case EncodeStatus.Error: return(new MediaEncodeProgressDto { Status = status, ProgressPercentage = firstOutput?.Progress ?? 0, Errors = firstOutput == null ? string.Empty : string.Concat(firstOutput.Error.Details.Select(ed => ed.Message)) }); default: return(new MediaEncodeProgressDto { Status = status }); } }