private BuildStoreEventArgs GetBuildStoreEventIfAny(IBuildDetail build)
        {
            BuildStoreEventArgs buildStoreEvent;
            if (!cacheLookup.ContainsKey(build.Uri.AbsoluteUri))
            {
                cacheLookup.Add(build.Uri.AbsoluteUri, build);

                buildStoreEvent = new BuildStoreEventArgs
                                      {
                                          Type = BuildStoreEventType.Build,
                                          Data = build
                                      };
                return buildStoreEvent;
            }

            IBuildDetail originalBuild = cacheLookup[build.Uri.AbsoluteUri];
            cacheLookup[build.Uri.AbsoluteUri] = build;

            if (originalBuild.Quality != build.Quality || originalBuild.Status != build.Status)
            {
                buildStoreEvent = new BuildStoreEventArgs
                                      {
                                          Data = build,
                                          Type = originalBuild.Quality != build.Quality
                                                     ? BuildStoreEventType.QualityChanged
                                                     : BuildStoreEventType.Build
                                      };
                return buildStoreEvent;
            }

            return null;
        }
        private void BuildCompletionEvent(BuildStoreEventArgs buildStoreEvent)
        {
            var status = buildStoreEvent.Data.Status;
            log.Information(string.Format("[Build Event] {0} : {1} : {2}", buildStoreEvent.Data.Status,
                                          buildStoreEvent.Data.BuildDefinition, buildStoreEvent.Data.Quality));

            BuildStatuses[buildStoreEvent.Data.BuildDefinition.Name] = status;
            var checkAllBuildStatuses = !Properties.Settings.Default.ShowStatusOfLastBuildOnly;

            bool flashOnStatusChange = Properties.Settings.Default.FlashLightOnBuildStatusChange;
            int? flashDuration = Properties.Settings.Default.FlashLightOnBuildStatusChange ? 5 : new int?();

            if ((checkAllBuildStatuses && BuildStatuses.All(b => b.Value == BuildStatus.Succeeded)) ||
                (!checkAllBuildStatuses && status == BuildStatus.Succeeded))
            {
                SetLED(DelcomBuildIndicator.GREENLED, true, flashOnStatusChange, flashDuration);
                SetLED(DelcomBuildIndicator.BLUELED, false, false);
                SetLED(DelcomBuildIndicator.REDLED, false, false);
            }
            if (status == BuildStatus.NotStarted || status == BuildStatus.InProgress)
            {
                if (Properties.Settings.Default.EnableDelcomLightColourChangeWhileBuilding)
                {
                    SetLED(DelcomBuildIndicator.GREENLED, false, false);
                    SetLED(DelcomBuildIndicator.BLUELED, true,
                           Properties.Settings.Default.EnableDelcomFlashingWhileBuilding);
                    SetLED(DelcomBuildIndicator.REDLED, false, false);
                }
                else if (flashOnStatusChange)
                {
                    SetLED(DelcomBuildIndicator.BLUELED, true, true, flashDuration, true);
                }
            }
            if (status == BuildStatus.PartiallySucceeded)
            {
                SetLED(DelcomBuildIndicator.GREENLED, true, false);
                SetLED(DelcomBuildIndicator.BLUELED, false, false);
                SetLED(DelcomBuildIndicator.REDLED, true, flashOnStatusChange, flashDuration);
            }
            if (status == BuildStatus.Stopped)
            {
                // Don't care
            }
            if (status == BuildStatus.Failed)
            {
                SetLED(DelcomBuildIndicator.REDLED, true, flashOnStatusChange, flashDuration);
                SetLED(DelcomBuildIndicator.GREENLED, false, false);
                SetLED(DelcomBuildIndicator.BLUELED, false, false);
            }
        }
 public void BuildQualityChangeEvent(BuildStoreEventArgs buildStoreEvent)
 {
     log.Information("[Quality Change Event]");
 }
 private void watcher_BuildQualityChangeEvent(object sender, BuildStoreEventArgs buildWatcherEventArgs)
 {
     BuildQualityChangeEvent(buildWatcherEventArgs);
 }
 private void watcher_BuildCompletionEvent(object sender, BuildStoreEventArgs buildWatcherEventArgs)
 {
     BuildCompletionEvent(buildWatcherEventArgs);
 }
 private void watcher_BuildQualityChangeEvent(object sender, BuildStoreEventArgs buildWatcherEventArgs)
 {
     const string qualityChangeMessage = "Build {0}, Quality {1}";
     var data = buildWatcherEventArgs.Data;
     logger.Information(string.Format(qualityChangeMessage, data.BuildNumber, data.Quality));
 }
 private void watcher_BuildCompletionEvent(object sender, BuildStoreEventArgs buildWatcherEventArgs)
 {
     const string statusMessage = "Build {0}, Status {1}";
     var data = buildWatcherEventArgs.Data;
     logger.Information(string.Format(statusMessage, data.BuildNumber, data.Status));
 }
 private void ProcessBuildEvent(BuildStoreEventArgs buildEvent)
 {
     switch (buildEvent.Type)
     {
         case BuildStoreEventType.Build:
             if (BuildCompletionEvent != null)
                 BuildCompletionEvent(this, buildEvent);
             break;
         case BuildStoreEventType.QualityChanged:
             if (BuildQualityChangeEvent != null)
                 BuildQualityChangeEvent(this, buildEvent);
             break;
         default:
             throw new Exception("Event was not recognised.");
     }
 }