Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }