private async Task SendBinaryContent(ApiObjectDescriptor sourceDescriptor, ApiObjectDescriptor newAdvertisement) { foreach (var element in sourceDescriptor.Elements) { if (IsBinaryAdvertisementElementType(element.Type)) { var value = element.Value as IBinaryElementValue ?? throw new InvalidOperationException($"Cannot cast advertisement {sourceDescriptor.Id} binary element {element.TemplateCode} value"); if (string.IsNullOrEmpty(value.Raw)) { continue; } var fileData = await SourceRestClient.DownloadFileAsync(sourceDescriptor.Id, value.DownloadUri); var matchedElement = newAdvertisement.Elements.First(e => e.TemplateCode == element.TemplateCode); EnsureUploadUrlIsValid(sourceDescriptor.Id, matchedElement); var res = await DestRestClient.UploadFileAsync(sourceDescriptor.Id, new Uri(matchedElement.UploadUrl), value.Filename, fileData); Interlocked.Increment(ref _uploadedBinariesCount); element.Value = res; } } }
private async Task SendBinaryContent(ApiObjectDescriptor sourceDescriptor, ApiObjectDescriptor newAdvertisement) { var binaryElements = sourceDescriptor.Elements.Where(e => IsBinaryAdvertisementElementType(e.Type)); foreach (var element in binaryElements) { var value = element.Value as IBinaryElementValue ?? throw new InvalidOperationException($"Cannot cast advertisement {sourceDescriptor.Id} binary element {element.TemplateCode} value"); if (string.IsNullOrEmpty(value.Raw)) { continue; } var fileData = await SourceRestClient.DownloadFileAsync(sourceDescriptor.Id, value.DownloadUri); var matchedElement = newAdvertisement.Elements.First(e => e.TemplateCode == element.TemplateCode); EnsureUploadUrlIsValid(sourceDescriptor.Id, matchedElement); var uploadResponse = await DestRestClient.UploadFileAsync( sourceDescriptor.Id, new Uri(matchedElement.UploadUrl), value.Filename, fileData); Interlocked.Increment(ref _uploadedBinariesCount); if (element.Type == ElementDescriptorType.CompositeBitmapImage) { var compositeBitmapImageElementValue = element.Value as ICompositeBitmapImageElementValue ?? throw new InvalidOperationException($"Cannot cast advertisement {sourceDescriptor.Id} composite image element {element.TemplateCode} value"); var sizeSpecificImagesUploadTasks = compositeBitmapImageElementValue .SizeSpecificImages .Select(async image => { var imageFileData = await SourceRestClient.DownloadFileAsync(sourceDescriptor.Id, image.DownloadUri); var headers = new[] { new NameValueHeaderValue(HeaderNames.AmsFileType, FileType.SizeSpecificBitmapImage.ToString()), new NameValueHeaderValue(HeaderNames.AmsImageSize, image.Size.ToString()) }; var imageUploadResponse = await DestRestClient.UploadFileAsync( sourceDescriptor.Id, new Uri(matchedElement.UploadUrl), image.Filename, imageFileData, headers); Interlocked.Increment(ref _uploadedBinariesCount); return(new SizeSpecificImage { Size = image.Size, Raw = imageUploadResponse.Raw }); }) .ToList(); element.Value = new CompositeBitmapImageElementValue { Raw = uploadResponse.Raw, CropArea = compositeBitmapImageElementValue.CropArea, SizeSpecificImages = await Task.WhenAll(sizeSpecificImagesUploadTasks) }; } else { element.Value = uploadResponse; } } }