Example #1
0
        public override void ProcessRequest(HttpContext context)
        {
            base.ProcessRequest(context);

            if (context.Response.StatusCode != 200)
            {
                return;
            }

            string key = context.Request.Url.OriginalString;

            if (context.Cache[key] != null)
            {
                return;
            }

            MediaRequestTrackingInformation info = new MediaRequestTrackingInformation(this.GetMediaRequest(context.Request));

            if (info.IsTrackedRequest())
            {
                return;
            }

            ResponseFilterStream filter = new ResponseFilterStream(context.Response.Filter);

            filter.TransformStream += stream => CachingFilter(stream, context, key);

            context.Response.Filter = filter;
        }
        public void OnMediaRequest(object sender, EventArgs args)
        {
            Assert.ArgumentNotNull(sender, "sender");
            Assert.ArgumentNotNull(args, "args");
            if (!AnalyticsSettings.Enabled)
                return;
            var site = Context.Site;
            if (site == null || !site.EnableAnalytics)
                return;
            var request =
                Event.ExtractParameter(args, 0) as Sitecore.Resources.Media.MediaRequest;
            if (request == null)
                return;
            var trackingInformation = new MediaRequestTrackingInformation(request);
            var mediaItem = trackingInformation.GetMediaItem();
            if (mediaItem == null)
                return;
            if (!IsTrackedForDownloads(mediaItem))
                return;
            Log.Info("Triggering download event", this);
            using (new ContextItemSwitcher(mediaItem))
            {
                try
                {
                    //if (!Tracker.IsActive)
                    //    return;
                    //var previousPage = Tracker.Current.Session.Interaction.PreviousPage;

                    //if (previousPage == null)
                    //    return;
                    //if (Tracker.Current.Session.Interaction.CurrentPage.PageEvents.All(pageEvent => pageEvent.PageEventDefinitionId != AnalyticsIds.DownloadEvent.Guid))
                    //    return;
                    //Log.Info("Download event is not defined on the page, triggering programatically", this);
                    //var item = mediaItem.Database.GetItem(AnalyticsIds.DownloadEvent);
                    //if (item == null)
                    //    return;
                    //var eventItem = new PageEventItem(item);
                    //previousPage.Register(eventItem);
                }
                catch (Exception ex)
                {
                    Log.Error("Media request analytics failed", ex, this.GetType());
                }
            }
            Log.Info("Triggered download event", this);
        }