aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/Folder.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-20 21:02:16 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-20 21:02:16 -0400
commit19d21a246d9304f824674df3138b30a5b8e51e8c (patch)
tree3078ba8b630c544915a4a2c1e0b928e193c19056 /MediaBrowser.Controller/Entities/Folder.cs
parent04030ffb65add7e280d3c9a8382bac706ebc56f4 (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.cs52
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()