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

NotifyIfNewAchievements() private method

private NotifyIfNewAchievements ( IList changedBuildStatuses ) : void
changedBuildStatuses IList
return void
        private void NotifyIfNewAchievements(IList<BuildStatus> changedBuildStatuses)
        {
            if (!changedBuildStatuses.Any(i => i.IsWorkingOrBroken())) return;
            var visiblePeopleWithNewChanges = from changedBuildStatus in changedBuildStatuses
                                             join person in _settings.VisiblePeople on changedBuildStatus.RequestedBy equals person.RawName
                                             where changedBuildStatus.IsWorkingOrBroken()
                                             select new
                                             {
                                                 Person = person,
                                                 Build = changedBuildStatus
                                             };

            foreach (var personWithNewChange in visiblePeopleWithNewChanges)
            {
                var newAchievements = personWithNewChange.Person.CalculateNewAchievements(_settings, personWithNewChange.Build);
                List<AchievementLookup> achievements = newAchievements.ToList();
                if (achievements.Any())
                {
                    personWithNewChange.Person.AddAchievements(achievements);
                    InvokeNewAchievement(personWithNewChange.Person, achievements);
                }
            }
            // this is required because achievements often write to settings e.g. cumulative build time
            _settings.Save();
        }