SirenOfShame.Lib.Watcher.RulesEngine.ExecuteNewBuilds C# (CSharp) Method

ExecuteNewBuilds() public method

public ExecuteNewBuilds ( IList newBuildStatuses ) : void
newBuildStatuses IList
return void
        public void ExecuteNewBuilds(IList<BuildStatus> newBuildStatuses)
        {
            try
            {
                ApplyUserMappings(newBuildStatuses);
                SendCiServerConnectedEvents();
                TryToGetAndSendNewSosOnlineAlerts();
                var allBuildStatuses = BuildStatusUtil.Merge(_previousBuildStatuses, newBuildStatuses);
                var changedBuildStatuses = GetChangedBuildStatuses(allBuildStatuses);
                if (!changedBuildStatuses.Any())
                {
                    if (_restarting)
                        InvokeRefreshStatus(allBuildStatuses);
                    return;
                }
                InvokeSetTrayIcon(changedBuildStatuses);
                InvokeRefreshStatusIfAnythingChanged(allBuildStatuses, changedBuildStatuses);
                AddAnyNewPeopleToSettings(changedBuildStatuses);
                UpdateBuildNamesInSettingsIfAnyChanged(changedBuildStatuses);
                var changedBuildStatusesAndTheirPreviousState = GetChangedBuildStatusesAndTheirPreviousState(changedBuildStatuses);
                FireApplicableRulesEngineEvents(changedBuildStatusesAndTheirPreviousState);
                WriteNewBuildsToSosDb(changedBuildStatusesAndTheirPreviousState);
                NotifyIfNewAchievements(changedBuildStatuses);
                InvokeStatsChanged(changedBuildStatuses);
                SyncNewBuildsToSos(changedBuildStatuses);
                InvokeNewNewsItemIfAny(changedBuildStatusesAndTheirPreviousState);
                CacheBuildStatuses(changedBuildStatuses);
            }
            finally
            {
                _restarting = false;
            }
        }

Usage Example

        public void RebuildSince(DateTime? since, Action<string> reportProgress)
        {
            try
            {
                var buildStatuses = _sosDb.ReadAll();
                var sortedBuildStatuses = buildStatuses
                    .Where(buildStatus => since == null || buildStatus.StartedTime > since)
                    .OrderByDescending(buildStatus => buildStatus.LocalStartTime)
                    .ToList();

                var totalBuilds = sortedBuildStatuses.Count;

                var rulesEngine = new RulesEngine(_settings)
                {
                    DisableSosOnline = true,
                    DisableWritingToSosDb = true
                };
                int i = 0;
                foreach (var buildStatus in sortedBuildStatuses)
                {
                    rulesEngine.ExecuteNewBuilds(new List<BuildStatus> {buildStatus});
                    if (i%10 == 0)
                    {
                        reportProgress(string.Format("Processing {0}/{1}", i, totalBuilds));
                    }
                    i++;
                }
                _settings.Save();
                reportProgress("Completed reset successfully");
            }
            catch (Exception ex)
            {
                _log.Error("Error in sync", ex);
                reportProgress("Error, check the logs. " + ex.Message);
            }
        }