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; }
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); } } }
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); } } } } }
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); } } } } }
internal static ICreative FindMatchingCreative(ICreative creative, Ad searchAd) { var type = creative.GetType(); return(searchAd.Creatives.Where(c => c.GetType() == type).FirstOrDefault()); }
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); } } } } } }
public HomeController(ITag tag, ICreative creative, IChapter chapter, IUser user, ILike like) { this.creativeRepository = creative; this.chapterRepository = chapter; }