internal void CombineTracks(List <ISong> trackCombination, List <ISong> playlistTracks, int minPlaytime) { var trailingTrack = GetTrailingTrack(trackCombination); var mixableTracks = GetMixableTracks(trailingTrack, playlistTracks, trackCombination); if (mixableTracks.Count > 0) { var newTrackCombinations = new List <List <ISong> >(); foreach (var mixableTrack in mixableTracks) { var newTrackCombination = GetNewTrackCombination(mixableTrack, trackCombination); newTrackCombinations.Add(newTrackCombination); } if (newTrackCombinations.Count() > 0) { foreach (var newTrackCombination in newTrackCombinations) { if (IsPlaytimeReached(newTrackCombination, minPlaytime)) { if (MatchingTrackCombinationList.Count >= 16777215) { var bestMatch = GetFinalBestMatch(MatchingTrackCombinationList); CulledMatchingTrackCombinationList.Add(bestMatch); MatchingTrackCombinationList = new List <List <ISong> >(); } MatchingTrackCombinationList.Add(newTrackCombination); } else { UpdateLongestTrackCombinationList(newTrackCombination); CombineTracks(newTrackCombination, playlistTracks, minPlaytime); } } } } }
public List <ISong> GetBestMatch() { var bestMatch = new List <ISong>(); if (IsPlaytimeReached(BaseTrackList, MinPlaytime)) { MatchingTrackCombinationList.Add(BaseTrackList); } else { CombineTracks(BaseTrackList, PlaylistTracks, MinPlaytime); } bestMatch = GetFinalBestMatch(MatchingTrackCombinationList); if (bestMatch.Count > 0) { CulledMatchingTrackCombinationList.Add(bestMatch); bestMatch = GetFinalBestMatch(CulledMatchingTrackCombinationList); } return(bestMatch); }