Example #1
0
        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
                });
            }
        }