diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-20 21:02:16 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-20 21:02:16 -0400 |
| commit | 19d21a246d9304f824674df3138b30a5b8e51e8c (patch) | |
| tree | 3078ba8b630c544915a4a2c1e0b928e193c19056 /MediaBrowser.Controller/Entities/Folder.cs | |
| parent | 04030ffb65add7e280d3c9a8382bac706ebc56f4 (diff) | |
made Audio.Artist plural and removed duplicated of artists into the people collection
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 2b924ea88..14851ec43 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -127,7 +127,7 @@ namespace MediaBrowser.Controller.Entities /// <returns>IEnumerable{BaseItem}.</returns> protected IEnumerable<BaseItem> GetIndexByPerformer(User user) { - return GetIndexByPerson(user, new List<string> { PersonType.Actor, PersonType.MusicArtist, PersonType.GuestStar }, LocalizedStrings.Instance.GetString("PerformerDispPref")); + return GetIndexByPerson(user, new List<string> { PersonType.Actor, PersonType.GuestStar }, true, LocalizedStrings.Instance.GetString("PerformerDispPref")); } /// <summary> @@ -137,7 +137,7 @@ namespace MediaBrowser.Controller.Entities /// <returns>IEnumerable{BaseItem}.</returns> protected IEnumerable<BaseItem> GetIndexByDirector(User user) { - return GetIndexByPerson(user, new List<string> { PersonType.Director }, LocalizedStrings.Instance.GetString("DirectorDispPref")); + return GetIndexByPerson(user, new List<string> { PersonType.Director }, false, LocalizedStrings.Instance.GetString("DirectorDispPref")); } /// <summary> @@ -145,9 +145,10 @@ namespace MediaBrowser.Controller.Entities /// </summary> /// <param name="user">The user.</param> /// <param name="personTypes">The person types we should match on</param> + /// <param name="includeAudio">if set to <c>true</c> [include audio].</param> /// <param name="indexName">Name of the index.</param> /// <returns>IEnumerable{BaseItem}.</returns> - protected IEnumerable<BaseItem> GetIndexByPerson(User user, List<string> personTypes, string indexName) + private IEnumerable<BaseItem> GetIndexByPerson(User user, List<string> personTypes, bool includeAudio, string indexName) { // Even though this implementation means multiple iterations over the target list - it allows us to defer @@ -158,9 +159,12 @@ namespace MediaBrowser.Controller.Entities var currentIndexName = indexName; var us = this; - var candidates = RecursiveChildren.Where(i => i.IncludeInIndex && i.AllPeople != null).ToList(); + var recursiveChildren = GetRecursiveChildren(user).Where(i => i.IncludeInIndex).ToList(); - return candidates.AsParallel().SelectMany(i => i.AllPeople.Where(p => personTypes.Contains(p.Type)) + // Get the candidates, but handle audio separately + var candidates = recursiveChildren.Where(i => i.AllPeople != null && !(i is Audio.Audio)).ToList(); + + var indexFolders = candidates.AsParallel().SelectMany(i => i.AllPeople.Where(p => personTypes.Contains(p.Type)) .Select(a => a.Name)) .Distinct() .Select(i => @@ -183,8 +187,38 @@ namespace MediaBrowser.Controller.Entities .Where(i => i != null) .Select(a => new IndexFolder(us, a, candidates.Where(i => i.AllPeople.Any(p => personTypes.Contains(p.Type) && p.Name.Equals(a.Name, StringComparison.OrdinalIgnoreCase)) - ), currentIndexName)); + ), currentIndexName)).AsEnumerable(); + + if (includeAudio) + { + var songs = recursiveChildren.OfType<Audio.Audio>().ToList(); + + indexFolders = songs.SelectMany(i => i.Artists) + .Distinct() + .Select(i => + { + try + { + return LibraryManager.GetArtist(i).Result; + } + catch (IOException ex) + { + Logger.ErrorException("Error getting artist {0}", ex, i); + return null; + } + catch (AggregateException ex) + { + Logger.ErrorException("Error getting artist {0}", ex, i); + return null; + } + }) + .Where(i => i != null) + .Select(a => new IndexFolder(us, a, + songs.Where(i => i.Artists.Contains(a.Name, StringComparer.OrdinalIgnoreCase) + ), currentIndexName)).Concat(indexFolders); + } + return indexFolders; } } @@ -201,7 +235,7 @@ namespace MediaBrowser.Controller.Entities { var indexName = LocalizedStrings.Instance.GetString("StudioDispPref"); - var candidates = RecursiveChildren.Where(i => i.IncludeInIndex && i.Studios != null).ToList(); + var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex && i.Studios != null).ToList(); return candidates.AsParallel().SelectMany(i => i.Studios) .Distinct() @@ -241,7 +275,7 @@ namespace MediaBrowser.Controller.Entities var indexName = LocalizedStrings.Instance.GetString("GenreDispPref"); //we need a copy of this so we don't double-recurse - var candidates = RecursiveChildren.Where(i => i.IncludeInIndex && i.Genres != null).ToList(); + var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex && i.Genres != null).ToList(); return candidates.AsParallel().SelectMany(i => i.Genres) .Distinct() @@ -282,7 +316,7 @@ namespace MediaBrowser.Controller.Entities var indexName = LocalizedStrings.Instance.GetString("YearDispPref"); //we need a copy of this so we don't double-recurse - var candidates = RecursiveChildren.Where(i => i.IncludeInIndex && i.ProductionYear.HasValue).ToList(); + var candidates = GetRecursiveChildren(user).Where(i => i.IncludeInIndex && i.ProductionYear.HasValue).ToList(); return candidates.AsParallel().Select(i => i.ProductionYear.Value) .Distinct() |
