Exemplo n.º 1
0
 public CreativeController(ITag tag, ICreative creative, IChapter chapter, IUser user, ILike like)
 {
     this.tagRepository = tag;
     this.creativeRepository = creative;
     this.chapterRepository = chapter;
     this.userRepository = user;
     this.likeRepository = like;
 }
Exemplo n.º 2
0
        internal static void MergeWrappedAd(Ad source, Ad dest)
        {
            // carry over impressions
            MergeWrappedAdBeacons(source, dest);

            // carry over tracking events
            foreach (ICreative destCreative in dest.Creatives)
            {
                ICreative sourceCreative = FindMatchingCreative(dest, destCreative, source);
                if (sourceCreative != null)
                {
                    MergeWrappedCreative(sourceCreative, destCreative);
                }
            }
        }
Exemplo n.º 3
0
        private static ICreative FindMatchingCreative(Ad ad, ICreative creative, Ad wrapperAd)
        {
            Type type = creative.GetType();

            var appropriateCreatives        = ad.Creatives.Where(c => c.GetType() == type).ToList();
            var appropriateWrapperCreatives = wrapperAd.Creatives.Where(c => c.GetType() == type).ToList();

            int index = appropriateCreatives.IndexOf(creative);

            if (appropriateWrapperCreatives.Count > index)
            {
                return(appropriateWrapperCreatives.ElementAt(index));
            }
            else
            {
                return(null);
            }
        }
 internal static ICreative FindMatchingCreative(ICreative creative, Ad searchAd)
 {
     var type = creative.GetType();
     return searchAd.Creatives.Where(c => c.GetType() == type).FirstOrDefault();
 }
        private static ICreative FindMatchingCreative(Ad ad, ICreative creative, Ad wrapperAd)
        {
            Type type = creative.GetType();

            var appropriateCreatives = ad.Creatives.Where(c => c.GetType() == type).ToList();
            var appropriateWrapperCreatives = wrapperAd.Creatives.Where(c => c.GetType() == type).ToList();

            int index = appropriateCreatives.IndexOf(creative);

            if (appropriateWrapperCreatives.Count > index)
                return appropriateWrapperCreatives.ElementAt(index);
            else
                return null;
        }
        internal static void MergeWrappedCreative(ICreative source, ICreative dest)
        {
            if (dest is CreativeLinear)
            {
                var linearWrapper = source as CreativeLinear;
                if (linearWrapper != null)
                {
                    var linear = (CreativeLinear)dest;

                    // apply TrackingEvents
                    foreach (var t in linearWrapper.TrackingEvents)
                        linear.TrackingEvents.Add(t);

                    foreach (var clicks in linearWrapper.ClickTracking)
                        linear.ClickTracking.Add(clicks);

                    foreach (var clicks in linearWrapper.CustomClick)
                        linear.CustomClick.Add(clicks);

                    // only add icons of unique program types since VAST 3.0 calls for conflicts to favor the deepest ad in the chain.
                    foreach (var icon in linearWrapper.Icons.Where(wi => !linear.Icons.Any(i => i.Program == wi.Program)))
                        linear.Icons.Add(icon);

                    // pass along the media files
                    foreach (var media in linearWrapper.MediaFiles)
                        linear.MediaFiles.Add(media);

                    // use the click through url from the wrapped doc
                    if (linearWrapper.ClickThrough != null)
                        linear.ClickThrough = linearWrapper.ClickThrough;

                    linear.Id = linearWrapper.Id;
                    linear.AdId = linearWrapper.AdId;
                    if (linear.AdParameters == null) linear.AdParameters = linearWrapper.AdParameters;
                    linear.Extensions.AddRange(linearWrapper.Extensions);
                    linear.SkipOffset = linearWrapper.SkipOffset;
                    linear.Duration = linearWrapper.Duration;
                }
            }
            else if (dest is CreativeNonLinears)
            {
                var nonLinearsWrapper = source as CreativeNonLinears;
                if (nonLinearsWrapper != null)
                {
                    var nonLinears = (CreativeNonLinears)dest;

                    // apply TrackingEvents
                    foreach (var t in nonLinearsWrapper.TrackingEvents)
                        nonLinears.TrackingEvents.Add(t);

                    // apply ClickTracking to nonlinear children
                    foreach (var nonLinearObj in nonLinears.NonLinears)
                    {
                        var nonlinearWrapperObj = nonLinearsWrapper.NonLinears.FirstOrDefault(nl => nl.Id == nonLinearObj.Id);
                        if (nonlinearWrapperObj == null)
                        {
                            nonlinearWrapperObj = nonLinearsWrapper.NonLinears.FirstOrDefault();
                        }
                        if (nonlinearWrapperObj != null)
                        {
                            foreach (var clicks in nonlinearWrapperObj.ClickTracking)
                                nonLinearObj.ClickTracking.Add(clicks);

                            nonLinearObj.MinSuggestedDuration = nonlinearWrapperObj.MinSuggestedDuration;
                        }
                    }
                }
            }
            else if (dest is CreativeCompanions)
            {
                var companions = (CreativeCompanions)dest;
                var companionsWrapper = (CreativeCompanions)source;

                foreach (var companionObj in companions.Companions.ToList()) // use .ToList() to allow it to be updated while being iterated
                {
                    var companionWrapperObj = companionsWrapper.Companions.FirstOrDefault(c => c.Id == companionObj.Id);
                    if (companionWrapperObj.Item != null)
                    {
                        // the companion is a filled out companion, add instead of trying to merge.
                        companions.Companions.Add(companionWrapperObj);
                    }
                    else
                    {
                        if (companionWrapperObj == null)
                        {
                            companionWrapperObj = companionsWrapper.Companions.FirstOrDefault(c => c.Width == companionObj.Width && c.Height == companionObj.Height);
                        }
                        if (companionWrapperObj != null)
                        {
                            // apply TrackingEvents
                            foreach (var t in companionWrapperObj.ViewTracking)
                                companionObj.ViewTracking.Add(t);

                            // apply ClickTracking
                            foreach (var clicks in companionWrapperObj.ClickTracking)
                                companionObj.ClickTracking.Add(clicks);
                        }
                    }
                }

            }
        }
Exemplo n.º 7
0
        private static void LoadCreatives(XElement adElement, Ad ad)
        {
            var vastCreatives = adElement.Element("Creatives");

            if (vastCreatives != null)
            {
                foreach (var vastCreative in vastCreatives.Elements("Creative"))
                {
                    var vastItem = vastCreative.Elements().FirstOrDefault();
                    if (vastItem != null)
                    {
                        ICreative creative = null;
                        switch (vastItem.Name.LocalName)
                        {
                        case "Linear":
                            var vastLinear     = vastItem;
                            var linearCreative = new CreativeLinear();
                            creative = linearCreative;

                            foreach (var trackingEvent in GetTrackingEvents(vastLinear))
                            {
                                linearCreative.TrackingEvents.Add(trackingEvent);
                            }

                            if (vastLinear.Elements("AdParameters").Any())
                            {
                                var xmlEncoded = (bool?)vastLinear.Element("AdParameters").Attribute("xmlEncoded") ?? false;
                                linearCreative.AdParameters = xmlEncoded ? XmlDecode((string)vastLinear.Element("AdParameters")) : (string)vastLinear.Element("AdParameters");
                            }

                            LoadVideoClicks(vastLinear, linearCreative);

                            if (vastLinear.Elements("CreativeExtensions").Any())
                            {
                                foreach (var vastExtension in vastLinear.Element("CreativeExtensions").Elements("CreativeExtension"))
                                {
                                    linearCreative.Extensions.Add(new Extension());     // TODO
                                }
                            }

                            linearCreative.Duration   = ToNullableTimeSpan((string)vastLinear.Element("Duration"));
                            linearCreative.SkipOffset = FlexibleOffset.Parse((string)vastLinear.Attribute("skipoffset"));

                            var vastIcons = vastLinear.Element("Icons");
                            if (vastIcons != null)
                            {
                                foreach (var vastIcon in vastIcons.Elements("Icon"))
                                {
                                    var icon = new Icon();

                                    if (vastIcon.Elements("IconClicks").Any())
                                    {
                                        var iconClicks = vastIcon.Element("IconClicks");

                                        icon.ClickThrough = GetUriValue(iconClicks.Element("IconClickThrough"));

                                        foreach (var clickTracking in iconClicks.Elements("IconClickTracking"))
                                        {
                                            icon.ClickTracking.Add((string)clickTracking);
                                        }
                                    }

                                    icon.ApiFramework = (string)vastIcon.Attribute("apiFramework") ?? string.Empty;
                                    icon.Duration     = ToNullableTimeSpan((string)vastIcon.Attribute("duration")) ?? new TimeSpan?();
                                    icon.Height       = (int?)vastIcon.Attribute("height");
                                    icon.Width        = (int?)vastIcon.Attribute("width");
                                    icon.Offset       = ToNullableTimeSpan((string)vastIcon.Attribute("offset")) ?? new TimeSpan?();
                                    icon.Program      = (string)vastIcon.Attribute("program") ?? string.Empty;
                                    icon.XPosition    = (string)vastIcon.Attribute("xPosition") ?? string.Empty;
                                    icon.YPosition    = (string)vastIcon.Attribute("yPosition") ?? string.Empty;
                                    icon.Item         = GetResources(vastIcon).FirstOrDefault();
                                    foreach (var viewTrackingUrl in vastIcon.Elements("IconViewTracking"))
                                    {
                                        icon.ViewTracking.Add((string)viewTrackingUrl);
                                    }
                                    linearCreative.Icons.Add(icon);
                                }
                            }

                            if (vastLinear.Elements("MediaFiles").Any())
                            {
                                foreach (var vastMedia in vastLinear.Element("MediaFiles").Elements("MediaFile"))
                                {
                                    var mediaFile = new MediaFile();
                                    mediaFile.ApiFramework        = (string)vastMedia.Attribute("apiFramework") ?? string.Empty;
                                    mediaFile.Bitrate             = ToNullableLong((string)vastMedia.Attribute("bitrate"));
                                    mediaFile.Codec               = (string)vastMedia.Attribute("codec") ?? string.Empty;
                                    mediaFile.Delivery            = (MediaFileDelivery)Enum.Parse(typeof(MediaFileDelivery), (string)vastMedia.Attribute("delivery"), true);
                                    mediaFile.Height              = (int?)vastMedia.Attribute("height") ?? 0;
                                    mediaFile.Width               = (int?)vastMedia.Attribute("width") ?? 0;
                                    mediaFile.Id                  = (string)vastMedia.Attribute("id");
                                    mediaFile.MaintainAspectRatio = (bool?)vastMedia.Attribute("maintainAspectRatio") ?? false;
                                    mediaFile.MaxBitrate          = (long?)vastMedia.Attribute("maxBitrate") ?? 0;
                                    mediaFile.MinBitrate          = (long?)vastMedia.Attribute("minBitrate") ?? 0;
                                    mediaFile.Scalable            = (bool?)vastMedia.Attribute("scalable") ?? false;
                                    mediaFile.Type                = (string)vastMedia.Attribute("type");
                                    mediaFile.Value               = GetUriValue(vastMedia);
                                    linearCreative.MediaFiles.Add(mediaFile);
                                }
                            }
                            break;

                        case "CompanionAds":
                            var vastCompanions = vastItem;
                            creative = LoadCompanions(vastCompanions);
                            break;

                        case "NonLinearAds":
                            var vastNonLinears    = vastItem;
                            var nonLinearCreative = new CreativeNonLinears();
                            creative = nonLinearCreative;

                            foreach (var trackingEvent in GetTrackingEvents(vastNonLinears))
                            {
                                nonLinearCreative.TrackingEvents.Add(trackingEvent);
                            }

                            foreach (var vastNonLinear in vastNonLinears.Elements("NonLinear"))
                            {
                                var nonLinear = new NonLinear();

                                if (vastNonLinear.Elements("AdParameters").Any())
                                {
                                    var xmlEncoded = (bool?)vastNonLinear.Element("AdParameters").Attribute("xmlEncoded") ?? false;
                                    nonLinear.AdParameters = xmlEncoded ? XmlDecode((string)vastNonLinear.Element("AdParameters")) : (string)vastNonLinear.Element("AdParameters");
                                }
                                ;
                                nonLinear.ApiFramework = (string)vastNonLinear.Attribute("apiFramework");
                                nonLinear.ClickThrough = GetUriValue(vastNonLinear.Element("NonLinearClickThrough"));
                                foreach (var vastTracking in vastNonLinear.Elements("NonLinearClickTracking"))
                                {
                                    nonLinear.ClickTracking.Add((string)vastTracking);
                                }

                                if (vastNonLinear.Elements("CreativeExtensions").Any())
                                {
                                    foreach (var vastExtension in vastNonLinear.Element("CreativeExtensions").Elements("CreativeExtension"))
                                    {
                                        nonLinear.Extensions.Add(new Extension());     // TODO
                                    }
                                }
                                nonLinear.ExpandedHeight       = (int?)vastNonLinear.Attribute("expandedHeight");
                                nonLinear.ExpandedWidth        = (int?)vastNonLinear.Attribute("expandedWidth");
                                nonLinear.Height               = (int?)vastNonLinear.Attribute("height") ?? 0;
                                nonLinear.Width                = (int?)vastNonLinear.Attribute("width") ?? 0;
                                nonLinear.MaintainAspectRatio  = (bool?)vastNonLinear.Attribute("maintainAspectRatio") ?? false;
                                nonLinear.MinSuggestedDuration = ToNullableTimeSpan((string)vastNonLinear.Attribute("minSuggestedDuration")) ?? new TimeSpan?();
                                nonLinear.Scalable             = (bool?)vastNonLinear.Attribute("scalable") ?? false;
                                nonLinear.Item = GetResources(vastNonLinear).FirstOrDefault();
                                nonLinearCreative.NonLinears.Add(nonLinear);
                            }
                            break;
                        }
                        if (creative != null)
                        {
                            creative.AdId     = (string)vastCreative.Attribute("AdID");
                            creative.Id       = (string)vastCreative.Attribute("id");
                            creative.Sequence = ToNullableInt((string)vastCreative.Attribute("sequence"));
                            ad.Creatives.Add(creative);
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
        internal static ICreative FindMatchingCreative(ICreative creative, Ad searchAd)
        {
            var type = creative.GetType();

            return(searchAd.Creatives.Where(c => c.GetType() == type).FirstOrDefault());
        }
Exemplo n.º 9
0
        internal static void MergeWrappedCreative(ICreative source, ICreative dest)
        {
            if (dest is CreativeLinear)
            {
                var linearWrapper = source as CreativeLinear;
                if (linearWrapper != null)
                {
                    var linear = (CreativeLinear)dest;

                    // apply TrackingEvents
                    foreach (var t in linearWrapper.TrackingEvents)
                    {
                        linear.TrackingEvents.Add(t);
                    }

                    foreach (var clicks in linearWrapper.ClickTracking)
                    {
                        linear.ClickTracking.Add(clicks);
                    }

                    foreach (var clicks in linearWrapper.CustomClick)
                    {
                        linear.CustomClick.Add(clicks);
                    }

                    // only add icons of unique program types since VAST 3.0 calls for conflicts to favor the deepest ad in the chain.
                    foreach (var icon in linearWrapper.Icons.Where(wi => !linear.Icons.Any(i => i.Program == wi.Program)))
                    {
                        linear.Icons.Add(icon);
                    }

                    // pass along the media files
                    foreach (var media in linearWrapper.MediaFiles)
                    {
                        linear.MediaFiles.Add(media);
                    }

                    // use the click through url from the wrapped doc
                    if (linearWrapper.ClickThrough != null)
                    {
                        linear.ClickThrough = linearWrapper.ClickThrough;
                    }

                    linear.Id   = linearWrapper.Id;
                    linear.AdId = linearWrapper.AdId;
                    if (linear.AdParameters == null)
                    {
                        linear.AdParameters = linearWrapper.AdParameters;
                    }
                    linear.Extensions.AddRange(linearWrapper.Extensions);
                    linear.SkipOffset = linearWrapper.SkipOffset;
                    linear.Duration   = linearWrapper.Duration;
                }
            }
            else if (dest is CreativeNonLinears)
            {
                var nonLinearsWrapper = source as CreativeNonLinears;
                if (nonLinearsWrapper != null)
                {
                    var nonLinears = (CreativeNonLinears)dest;

                    // apply TrackingEvents
                    foreach (var t in nonLinearsWrapper.TrackingEvents)
                    {
                        nonLinears.TrackingEvents.Add(t);
                    }

                    // apply ClickTracking to nonlinear children
                    foreach (var nonLinearObj in nonLinears.NonLinears)
                    {
                        var nonlinearWrapperObj = nonLinearsWrapper.NonLinears.FirstOrDefault(nl => nl.Id == nonLinearObj.Id);
                        if (nonlinearWrapperObj == null)
                        {
                            nonlinearWrapperObj = nonLinearsWrapper.NonLinears.FirstOrDefault();
                        }
                        if (nonlinearWrapperObj != null)
                        {
                            foreach (var clicks in nonlinearWrapperObj.ClickTracking)
                            {
                                nonLinearObj.ClickTracking.Add(clicks);
                            }

                            nonLinearObj.MinSuggestedDuration = nonlinearWrapperObj.MinSuggestedDuration;
                        }
                    }
                }
            }
            else if (dest is CreativeCompanions)
            {
                var companions        = (CreativeCompanions)dest;
                var companionsWrapper = (CreativeCompanions)source;

                foreach (var companionObj in companions.Companions.ToList()) // use .ToList() to allow it to be updated while being iterated
                {
                    var companionWrapperObj = companionsWrapper.Companions.FirstOrDefault(c => c.Id == companionObj.Id);
                    if (companionWrapperObj.Item != null)
                    {
                        // the companion is a filled out companion, add instead of trying to merge.
                        companions.Companions.Add(companionWrapperObj);
                    }
                    else
                    {
                        if (companionWrapperObj == null)
                        {
                            companionWrapperObj = companionsWrapper.Companions.FirstOrDefault(c => c.Width == companionObj.Width && c.Height == companionObj.Height);
                        }
                        if (companionWrapperObj != null)
                        {
                            // apply TrackingEvents
                            foreach (var t in companionWrapperObj.ViewTracking)
                            {
                                companionObj.ViewTracking.Add(t);
                            }

                            // apply ClickTracking
                            foreach (var clicks in companionWrapperObj.ClickTracking)
                            {
                                companionObj.ClickTracking.Add(clicks);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 10
0
 public HomeController(ITag tag, ICreative creative, IChapter chapter, IUser user, ILike like)
 {
     this.creativeRepository = creative;
     this.chapterRepository = chapter;
 }