private void UpdateStatistics(AudioFileOption option) { if (option.AccuracyScore > _BestAccuracyScore) { _BestAccuracyScore = option.AccuracyScore; } if (option.GetTotalPoints() > _BestTotalPoints) { _BestTotalPoints = option.GetTotalPoints(); } if (option.ArtistAlbumPoints > _BestArtistAlbumPoints) { _BestArtistAlbumPoints = option.ArtistAlbumPoints; } if (option.TrackPoints > _BestTrackPoints) { _BestTrackPoints = option.TrackPoints; } }
public void AddAudioFileOption(AudioFileOption newOption) { //If less than minimum search filter size, add to it and return if (_AudioFileOptions.Count < Globals.MinimumSearchFilterSize) { _AudioFileOptions.Add(newOption); _AudioFileOptions = _AudioFileOptions.OrderByDescending(option => option.GetTotalPoints()).ToList(); UpdateStatistics(newOption); return; } int newOptionTotalPoints = newOption.GetTotalPoints(); int lowestTotalPoints = _AudioFileOptions.Last().GetTotalPoints(); //The search filter is full, so only add if the option scores equal or better than the worst option if (newOptionTotalPoints >= lowestTotalPoints) { _AudioFileOptions.Add(newOption); //add new option to end of list if (newOptionTotalPoints > lowestTotalPoints) //the list needs to be sorted again { _AudioFileOptions = _AudioFileOptions.OrderByDescending(option => option.GetTotalPoints()).ToList(); int lowestPointsToKeep = _AudioFileOptions[Globals.MinimumSearchFilterSize - 1].GetTotalPoints(); if (lowestPointsToKeep > lowestTotalPoints) //we need to trim out the worst options { _AudioFileOptions = _AudioFileOptions.Where(option => option.GetTotalPoints() >= lowestPointsToKeep).ToList(); RefreshStatistics(); //Full refresh of stats } else { UpdateStatistics(newOption); //No options were removed, so just update the stats with the new option added } } else { UpdateStatistics(newOption); //No options were removed, so just update the stats with the new option added } } }
private static int ChooseBestCandidateOption(AudioFileOption candidateOption_1, AudioFileOption candidateOption_2) { if (candidateOption_1.AccuracyScore >= candidateOption_2.AccuracyScore && candidateOption_1.GetTotalPoints() >= candidateOption_2.GetTotalPoints()) { if (candidateOption_1.ArtistAlbumPoints > 0 && candidateOption_1.TrackPoints > 0) { return(1); } } if (candidateOption_2.AccuracyScore >= candidateOption_1.AccuracyScore && candidateOption_2.GetTotalPoints() >= candidateOption_1.GetTotalPoints()) { if (candidateOption_2.ArtistAlbumPoints > 0 && candidateOption_2.TrackPoints > 0) { return(2); } } if (candidateOption_1.AccuracyScore >= candidateOption_2.AccuracyScore && candidateOption_1.GetTotalPoints() >= candidateOption_2.GetTotalPoints()) { return(1); } if (candidateOption_2.AccuracyScore >= candidateOption_1.AccuracyScore && candidateOption_2.GetTotalPoints() >= candidateOption_1.GetTotalPoints()) { return(2); } //Candidate options have opposing accuracy scores and total points int accuracyScoreDiff = Math.Abs(candidateOption_1.AccuracyScore - candidateOption_2.AccuracyScore); int totalPointsDiff = Math.Abs(candidateOption_1.GetTotalPoints() - candidateOption_2.GetTotalPoints()); if (accuracyScoreDiff >= totalPointsDiff) //Better to go with higher accuracy score { if (candidateOption_1.AccuracyScore >= candidateOption_2.AccuracyScore) { if (candidateOption_1.ArtistAlbumPoints > 0 && candidateOption_1.TrackPoints > 0) { return(1); } else if (candidateOption_2.ArtistAlbumPoints > 0 && candidateOption_2.TrackPoints > 0) { return(2); } else { return(1); } } else { if (candidateOption_2.ArtistAlbumPoints > 0 && candidateOption_2.TrackPoints > 0) { return(2); } else if (candidateOption_1.ArtistAlbumPoints > 0 && candidateOption_1.TrackPoints > 0) { return(1); } else { return(2); } } } else //better to go with more total points { if (candidateOption_1.GetTotalPoints() >= candidateOption_2.GetTotalPoints()) { if (candidateOption_1.ArtistAlbumPoints > 0 && candidateOption_1.TrackPoints > 0) { return(1); } else if (candidateOption_2.ArtistAlbumPoints > 0 && candidateOption_2.TrackPoints > 0) { return(2); } else { return(1); } } else { if (candidateOption_2.ArtistAlbumPoints > 0 && candidateOption_2.TrackPoints > 0) { return(2); } else if (candidateOption_1.ArtistAlbumPoints > 0 && candidateOption_1.TrackPoints > 0) { return(1); } else { return(2); } } } }