public async Task <bool> CopyBlobAsync(IZeroBlob original) { var azureBlobOriginal = original as AzureBlob; var originalExists = await original.ExistsAsync(); if (azureBlobOriginal == null || !originalExists) { return(false); } await Blob.StartCopyAsync(azureBlobOriginal.Blob); while (Blob.CopyState.Status == CopyStatus.Pending) { await Task.Delay(100); } if (Blob.CopyState.Status != CopyStatus.Success) { return(false); } var type = await azureBlobOriginal.GetContentTypeAsync(); await SetContentTypeAsync(type); return(true); }
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 }); } }