Exemple #1
0
 public static List<MusicItemInfo> GetTree()
 {
     List<MusicItemInfo> items = new List<MusicItemInfo>();
     IEnumerable<MusicTrackInfo> tracks = files.Select(file => new MusicTrackInfo()
     {
         Path = file,
         Tag = EncodingFixer.FixProperties(TagLib.File.Create(file).Tag)
     });
     const string otherDirName = "Other";
     List<string> artists = tracks.GroupBy(track => track.Tag.JoinedAlbumArtists)
         .Select(grp => GetStringOrReplacement(grp.First().Tag.JoinedAlbumArtists, otherDirName)).ToList();
     artists.Sort();
     foreach (string artist in artists)
     {
         MusicCollectionInfo artistInfo = new MusicCollectionInfo
         {
             Name = artist,
             Children = new List<MusicItemInfo>()
         };
         items.Add(artistInfo);
         IEnumerable<MusicTrackInfo> tracksByArtist = tracks
             .Where(track => GetStringOrReplacement(track.Tag.JoinedAlbumArtists, otherDirName) == artist);
         if (artist == otherDirName)
             AddTracksToTree(tracksByArtist, artistInfo, items);
         else
         {
             List<string> albums = tracksByArtist.GroupBy(tag => tag.Tag.Album)
                 .Select(grp => grp.First().Tag.Album).ToList();
             albums.Sort();
             foreach (string album in albums)
             {
                 IEnumerable<MusicTrackInfo> tracksByAlbum = tracksByArtist.Where(track => track.Tag.Album == album);
                 if (String.IsNullOrEmpty(album))
                     AddTracksToTree(tracksByAlbum, artistInfo, items);
                 else
                 {
                     MusicCollectionInfo albumInfo = new MusicCollectionInfo()
                     {
                         Name = album,
                         Parent = artistInfo,
                         Children = new List<MusicItemInfo>()
                     };
                     items.Add(albumInfo);
                     artistInfo.Children.Add(albumInfo);
                     AddTracksToTree(tracksByAlbum, albumInfo, items);
                 }
             }
         }
     }
     return items;
 }
Exemple #2
0
 public void ThenShouldBeAbleToGetTree()
 {
     List<MusicItemInfo> trueItems = new List<MusicItemInfo>();
     string dir1 = DirUtils.GetAbsoluteDir(DirUtils.dir1);
     string dir2 = DirUtils.GetAbsoluteDir(DirUtils.dir2);
     MusicCollectionInfo[] topLevel = new MusicCollectionInfo[] {
         new MusicCollectionInfo()
         {
             Name = "In Flames",
             Children = new List<MusicItemInfo>()
             {
                 new MusicCollectionInfo()
                 {
                     Name = "A Sense Of Purpose",
                     Children = new List<MusicItemInfo>()
                     {
                         new MusicTrackInfo()
                         {
                             Name = "Alias",
                             Path = dir1 + "Alias.m4a"
                         }
                     }
                 }
             }
         }, new MusicCollectionInfo()
         {
             Name = "Linkin Park",
             Children = new List<MusicItemInfo>()
             {
                 new MusicCollectionInfo()
                 {
                     Name = "Hybrid Theory [Bonus CD] Disc 1",
                     Children = new List<MusicItemInfo>()
                     {
                         new MusicTrackInfo()
                         {
                             Name = "Papercut",
                             Path = dir2 + "01 - Papercut.mp3"
                         }, new MusicTrackInfo()
                         {
                             Name = "One Step Closer",
                             Path = dir2 + "02 - One Step Closer.mp3"
                         }, new MusicTrackInfo()
                         {
                             Name = "With You",
                             Path = dir2 + "03 - With You.mp3"
                         }, new MusicTrackInfo()
                         {
                             Name = "Points of Authority",
                             Path = dir2 + "04 - Points of Authority.mp3"
                         }
                     }
                 }, new MusicCollectionInfo()
                 {
                     Name = "OST Transformers: Revenge of the Fallen",
                     Children = new List<MusicItemInfo>()
                     {
                         new MusicTrackInfo()
                         {
                             Name = "New Divide",
                             Path = dir2 + "New Divide.mp3"
                         }
                     }
                 }
             }
         }, new MusicCollectionInfo()
         {
             Name = "Other",
             Children = new List<MusicItemInfo>()
             {
                 new MusicTrackInfo()
                 {
                     Name = "Phantom of the Opera",
                     Path = dir1 + "Phantom of the Opera.mp3"
                 }
             }
         }, new MusicCollectionInfo()
         {
             Name = "Ария",
             Children = new List<MusicItemInfo>()
             {
                 new MusicCollectionInfo()
                 {
                     Name = "Смутное Время",
                     Children = new List<MusicItemInfo>()
                     {
                         new MusicTrackInfo()
                         {
                             Name = "Я свободен!",
                             Path = dir1 + "Ya svoboden.mp3"
                         }
                     }
                 }
             }
         }
     };
     foreach (MusicItemInfo item in topLevel)
         PrepareItemsRecursive(trueItems, item);
     List<MusicItemInfo> actualItems = FilesList.GetTree();
     Assert.AreEqual(trueItems.Count, actualItems.Count);
     for (int i = 0; i < trueItems.Count; i++)
     {
         MusicItemInfo expectedItem = trueItems[i], actualItem = actualItems[i];
         Assert.AreEqual(expectedItem.GetType(), actualItem.GetType());
         Assert.AreEqual(expectedItem.Name, actualItem.Name);
         if (expectedItem is MusicCollectionInfo)
             Assert.AreEqual((expectedItem as MusicCollectionInfo).Children.Count,
                 (actualItem as MusicCollectionInfo).Children.Count);
         else
             Assert.AreEqual((expectedItem as MusicTrackInfo).Path, (actualItem as MusicTrackInfo).Path);
     }
 }
Exemple #3
0
 private static void AddTracksToTree(IEnumerable<MusicTrackInfo> tracks, MusicCollectionInfo parent,
     List<MusicItemInfo> items)
 {
     foreach (MusicTrackInfo track in tracks)
     {
         track.Name = String.IsNullOrEmpty(track.Tag.Title) ? new FileInfo(track.Path).Name : track.Tag.Title;
         track.Parent = parent;
         parent.Children.Add(track);
         items.Add(track);
     }
 }