コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }