public IList <DeredundafierDTO> GetDeredundancyTargets() { List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); var songTitleSetsQ = (from song in db.Songs group song by song.Title into songTitleSets where songTitleSets.Count() > 1 select songTitleSets); foreach (var set in songTitleSetsQ) { DeredundafierDTO target = new DeredundafierDTO() { Name = set.Key }; targets.Add(target); foreach (Song song in set) { var artists = song.Recordings.Select(x => x.Artist).Distinct(); string artistName = "Various"; if (artists.Count() == 1) { artistName = artists.First().Name; } DeredundafierDTO selector = new SelectorDTO() { Name = $"{artistName} - {song.Title}", Data = song, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in song.Recordings) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Album.Title} - {recording.Title}", Data = recording }); } } } return(targets); }
public IEnumerable <DeredundafierDTO> GetDeredundancyTargets() { List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); var artistNameSetsQ = (from artist in db.Artists group artist by artist.Name into artistNameSets where artistNameSets.Count() > 1 select artistNameSets); foreach (var set in artistNameSetsQ) { DeredundafierDTO target = new DeredundafierDTO() { Name = set.Key }; targets.Add(target); foreach (Artist artist in set) { DeredundafierDTO selector = new SelectorDTO() { Name = artist.Name, Data = artist, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in artist.Recordings.Take(10)) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Album.Title} - {recording.Title}", Data = recording }); } } } return(targets); }
public IList <DeredundafierDTO> GetDeepDeredundancyTargets() { Dictionary <string, List <Song> > map = new Dictionary <string, List <Song> >(); foreach (Song song in db.Songs) { string name = song.Title.ToLowerInvariant(); name.Trim(); if (greedyParenPattern.IsMatch(name)) { name = greedyParenPattern.Replace(name, ""); } //Reset name if this fully deletes it. if (name == "") { name = song.Title.ToLowerInvariant(); } //Add base name if (!map.ContainsKey(name)) { map.Add(name, new List <Song>()); } map[name].Add(song); } TextInfo titleFormatter = new CultureInfo("en-US", false).TextInfo; List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); foreach (var set in map) { if (set.Value.Count < 2) { continue; } DeredundafierDTO target = new DeredundafierDTO() { Name = titleFormatter.ToTitleCase(set.Key) }; targets.Add(target); foreach (Song song in set.Value) { var artists = song.Recordings.Select(x => x.Artist).Distinct(); string artistName = "Various"; if (artists.Count() == 1) { artistName = artists.First().Name; } DeredundafierDTO selector = new SelectorDTO() { Name = $"{artistName} - {song.Title}", Data = song, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in song.Recordings) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Album.Title} - {recording.Title}", Data = recording }); } } } targets.Sort((a, b) => a.Name.CompareTo(b.Name)); return(targets); }
public IEnumerable <DeredundafierDTO> GetDeepDeredundancyTargets() { //Map of Album Titles to lists of albums with this title Dictionary <string, List <Album> > map = new Dictionary <string, List <Album> >(); foreach (Album album in db.Albums) { string title = album.Title.ToLowerInvariant(); title.Trim(); if (greedyParenPattern.IsMatch(title)) { title = greedyParenPattern.Replace(title, ""); } //Reset name if this fully deletes it. if (title == "") { title = album.Title.ToLowerInvariant(); } //Add base name if (!map.ContainsKey(title)) { map.Add(title, new List <Album>()); } map[title].Add(album); } TextInfo titleFormatter = new CultureInfo("en-US", false).TextInfo; List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); foreach (var albumSet in map) { if (albumSet.Value.Count < 2) { continue; } DeredundafierDTO target = new DeredundafierDTO() { Name = titleFormatter.ToTitleCase(albumSet.Key) }; targets.Add(target); foreach (Album album in albumSet.Value) { List <Artist> artists = album.Recordings.Select(t => t.Artist).Distinct().ToList(); string artistName; if (artists.Count == 0) { Console.WriteLine($"Failed to find artist for album: ({album.Id},{album.Title}). Skipping."); continue; } else if (artists.Count == 1) { artistName = artists[0].Name; } else { artistName = "Various"; } DeredundafierDTO selector = new SelectorDTO() { Name = $"{artistName} - {album.Title}", Data = album, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in album.Recordings) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Title}", Data = recording }); } } } return(targets); }
public IEnumerable <DeredundafierDTO> GetDeredundancyTargets() { List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); var deredundancyAlbumSets = (from albums in db.Albums group albums by albums.Title into albumSets where albumSets.Count() > 1 select albumSets); foreach (var albumSet in deredundancyAlbumSets) { DeredundafierDTO target = new DeredundafierDTO() { Name = albumSet.Key }; targets.Add(target); foreach (Album album in albumSet) { List <Artist> artists = album.Recordings.Select(t => t.Artist).Distinct().ToList(); string artistName; if (artists.Count == 0) { Console.WriteLine($"Failed to find artist for album: ({album.Id},{album.Title}). Skipping."); continue; } else if (artists.Count == 1) { artistName = artists[0].Name; } else { artistName = "Various"; } DeredundafierDTO selector = new SelectorDTO() { Name = $"{artistName} - {album.Title}", Data = album, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in album.Recordings) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Title}", Data = recording }); } } } return(targets); }
public IEnumerable <DeredundafierDTO> GetDeepDeredundancyTargets() { Dictionary <string, List <Artist> > map = new Dictionary <string, List <Artist> >(); foreach (Artist artist in db.Artists) { string name = artist.Name.ToLowerInvariant(); name.Trim(); if (greedyParenPattern.IsMatch(name)) { name = greedyParenPattern.Replace(name, ""); } //Reset name if this fully deletes it. if (name == "") { name = artist.Name.ToLowerInvariant(); } //Add base name if (!map.ContainsKey(name)) { map.Add(name, new List <Artist>()); } map[name].Add(artist); } TextInfo titleFormatter = new CultureInfo("en-US", false).TextInfo; List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); foreach (var set in map) { if (set.Value.Count < 2) { continue; } DeredundafierDTO target = new DeredundafierDTO() { Name = titleFormatter.ToTitleCase(set.Key) }; targets.Add(target); foreach (Artist artist in set.Value) { DeredundafierDTO selector = new SelectorDTO() { Name = artist.Name, Data = artist, IsChecked = false }; target.Children.Add(selector); foreach (Recording recording in artist.Recordings.Take(10)) { selector.Children.Add(new DeredundafierDTO() { Name = $"{recording.Artist.Name} - {recording.Album.Title} - {recording.Title}", Data = recording }); } } } return(targets); }
public IEnumerable <DeredundafierDTO> GetCompositeArtistTargets() { List <DeredundafierDTO> targets = new List <DeredundafierDTO>(); Dictionary <string, List <Artist> > artistsByName = new Dictionary <string, List <Artist> >(); Dictionary <Artist, List <string> > splitArtistsByName = new Dictionary <Artist, List <string> >(); foreach (Artist artist in db.Artists) { string name = artist.Name.Trim().ToLowerInvariant(); //Add base name if (!artistsByName.ContainsKey(name)) { artistsByName.Add(name, new List <Artist>()); } artistsByName[name].Add(artist); var subNames = name .Split(new string[] { "&", ",", ";", " with ", "feat. ", " featuring " }, options: StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .Where(x => !string.IsNullOrEmpty(x)); if (subNames.Count() > 1) { splitArtistsByName.Add(artist, subNames.ToList()); } } foreach (var kvp in splitArtistsByName) { List <Artist> matchingArtists = new List <Artist>(); foreach (string subName in kvp.Value) { if (artistsByName.ContainsKey(subName)) { matchingArtists.AddRange(artistsByName[subName]); } } foreach (Artist artist in kvp.Key.GroupOf.Select(x => x.Member).Distinct()) { matchingArtists.Add(artist); } var reducedSet = matchingArtists.Distinct(); if (reducedSet.Count() == 0) { continue; } DeredundafierDTO target = new DeredundafierDTO() { Name = kvp.Key.Name, Data = kvp.Key }; foreach (Artist artist in reducedSet) { target.Children.Add(new SelectorDTO() { Name = artist.Name, Data = artist, IsChecked = kvp.Key.GroupOf.Select(x => x.Member).Contains(artist) }); } targets.Add(target); } return(targets); }