aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-18 01:34:10 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-18 01:34:10 -0400
commitd1d0487feee578822e76ca48e88dc61b94080570 (patch)
tree2cfdcdbf747b11b237c3eb87f2041ef9089b4069 /MediaBrowser.Controller
parent5486e40e1d057f0a4b845a5cc2df92afdaa86c3f (diff)
update artist queries
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicArtist.cs36
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs71
-rw-r--r--MediaBrowser.Controller/Entities/IItemByName.cs6
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs3
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs12
-rw-r--r--MediaBrowser.Controller/Entities/UserView.cs11
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs45
-rw-r--r--MediaBrowser.Controller/Playlists/Playlist.cs12
8 files changed, 101 insertions, 95 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index fb8a24061a..df46e42086 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
@@ -56,36 +56,20 @@ namespace MediaBrowser.Controller.Entities.Audio
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
{
- var itemByNameFilter = GetItemFilter();
+ if (query.IncludeItemTypes.Length == 0)
+ {
+ query.IncludeItemTypes = new[] { typeof(Audio).Name, typeof(MusicVideo).Name, typeof(MusicAlbum).Name };
+ query.ArtistNames = new[] { Name };
+ }
- if (query.User != null)
+ // Need this for now since the artist filter isn't yet supported by the db
+ if (ConfigurationManager.Configuration.SchemaVersion < 79)
{
- return query.User.RootFolder
- .GetRecursiveChildren(query.User, i =>
- {
- if (query.IsFolder.HasValue)
- {
- if (query.IsFolder.Value != i.IsFolder)
- {
- return false;
- }
- }
- return itemByNameFilter(i);
- });
+ var filter = GetItemFilter();
+ return LibraryManager.GetItemList(query).Where(filter);
}
- return LibraryManager.RootFolder
- .GetRecursiveChildren(i =>
- {
- if (query.IsFolder.HasValue)
- {
- if (query.IsFolder.Value != i.IsFolder)
- {
- return false;
- }
- }
- return itemByNameFilter(i);
- });
+ return LibraryManager.GetItemList(query);
}
protected override IEnumerable<BaseItem> ActualChildren
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 77e3624191..57b218b4d2 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -749,7 +749,7 @@ namespace MediaBrowser.Controller.Entities
{
var user = query.User;
- if (RequiresPostFiltering(query))
+ if (!query.ForceDirect && RequiresPostFiltering(query))
{
IEnumerable<BaseItem> items;
Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
@@ -760,7 +760,7 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- items = GetRecursiveChildren(user, filter);
+ items = GetRecursiveChildren(user, query);
}
return PostFilterAndSort(items, query);
@@ -817,19 +817,24 @@ namespace MediaBrowser.Controller.Entities
return true;
}
}
- if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase))
- {
- Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder");
- return true;
- }
- if (query.SortBy.Contains(ItemSortBy.AlbumArtist, StringComparer.OrdinalIgnoreCase))
+
+ if (ConfigurationManager.Configuration.SchemaVersion < 79)
{
- Logger.Debug("Query requires post-filtering due to ItemSortBy.AlbumArtist");
- return true;
+ if (query.SortBy.Contains(ItemSortBy.AlbumArtist, StringComparer.OrdinalIgnoreCase))
+ {
+ Logger.Debug("Query requires post-filtering due to ItemSortBy.AlbumArtist");
+ return true;
+ }
+ if (query.SortBy.Contains(ItemSortBy.Artist, StringComparer.OrdinalIgnoreCase))
+ {
+ Logger.Debug("Query requires post-filtering due to ItemSortBy.Artist");
+ return true;
+ }
}
- if (query.SortBy.Contains(ItemSortBy.Artist, StringComparer.OrdinalIgnoreCase))
+
+ if (query.SortBy.Contains(ItemSortBy.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase))
{
- Logger.Debug("Query requires post-filtering due to ItemSortBy.Artist");
+ Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder");
return true;
}
if (query.SortBy.Contains(ItemSortBy.Budget, StringComparer.OrdinalIgnoreCase))
@@ -1109,10 +1114,13 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- if (query.ArtistNames.Length > 0)
+ if (ConfigurationManager.Configuration.SchemaVersion < 79)
{
- Logger.Debug("Query requires post-filtering due to ArtistNames");
- return true;
+ if (query.ArtistNames.Length > 0)
+ {
+ Logger.Debug("Query requires post-filtering due to ArtistNames");
+ return true;
+ }
}
return false;
@@ -1178,7 +1186,7 @@ namespace MediaBrowser.Controller.Entities
else
{
items = query.Recursive
- ? GetRecursiveChildren(user, filter)
+ ? GetRecursiveChildren(user, query)
: GetChildren(user, true).Where(filter);
}
@@ -1215,19 +1223,14 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Adds the children to list.
/// </summary>
- /// <param name="user">The user.</param>
- /// <param name="includeLinkedChildren">if set to <c>true</c> [include linked children].</param>
- /// <param name="result">The result.</param>
- /// <param name="recursive">if set to <c>true</c> [recursive].</param>
- /// <param name="filter">The filter.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
- private void AddChildren(User user, bool includeLinkedChildren, Dictionary<Guid, BaseItem> result, bool recursive, Func<BaseItem, bool> filter)
+ private void AddChildren(User user, bool includeLinkedChildren, Dictionary<Guid, BaseItem> result, bool recursive, InternalItemsQuery query)
{
foreach (var child in GetEligibleChildrenForRecursiveChildren(user))
{
if (child.IsVisible(user))
{
- if (filter == null || filter(child))
+ if (query == null || UserViewBuilder.FilterItem(child, query))
{
result[child.Id] = child;
}
@@ -1236,7 +1239,7 @@ namespace MediaBrowser.Controller.Entities
{
var folder = (Folder)child;
- folder.AddChildren(user, includeLinkedChildren, result, true, filter);
+ folder.AddChildren(user, includeLinkedChildren, result, true, query);
}
}
}
@@ -1247,7 +1250,7 @@ namespace MediaBrowser.Controller.Entities
{
if (child.IsVisible(user))
{
- if (filter == null || filter(child))
+ if (query == null || UserViewBuilder.FilterItem(child, query))
{
result[child.Id] = child;
}
@@ -1265,10 +1268,10 @@ namespace MediaBrowser.Controller.Entities
/// <exception cref="System.ArgumentNullException"></exception>
public IEnumerable<BaseItem> GetRecursiveChildren(User user, bool includeLinkedChildren = true)
{
- return GetRecursiveChildren(user, i => true);
+ return GetRecursiveChildren(user, null);
}
- public virtual IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter)
+ public virtual IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
{
if (user == null)
{
@@ -1277,7 +1280,7 @@ namespace MediaBrowser.Controller.Entities
var result = new Dictionary<Guid, BaseItem>();
- AddChildren(user, true, result, true, filter);
+ AddChildren(user, true, result, true, query);
return result.Values;
}
@@ -1534,7 +1537,8 @@ namespace MediaBrowser.Controller.Entities
User = user,
Recursive = true,
IsFolder = false,
- IsUnaired = false
+ IsUnaired = false,
+ EnableTotalRecordCount = false
};
@@ -1562,7 +1566,8 @@ namespace MediaBrowser.Controller.Entities
{
User = user,
Recursive = true,
- IsFolder = false
+ IsFolder = false,
+ EnableTotalRecordCount = false
}).ConfigureAwait(false);
@@ -1578,7 +1583,8 @@ namespace MediaBrowser.Controller.Entities
{
Recursive = true,
IsFolder = false,
- ExcludeLocationTypes = new[] { LocationType.Virtual }
+ ExcludeLocationTypes = new[] { LocationType.Virtual },
+ EnableTotalRecordCount = false
}).Result;
@@ -1630,7 +1636,8 @@ namespace MediaBrowser.Controller.Entities
{
Recursive = true,
IsFolder = false,
- ExcludeLocationTypes = new[] { LocationType.Virtual }
+ ExcludeLocationTypes = new[] { LocationType.Virtual },
+ EnableTotalRecordCount = false
}).Result;
diff --git a/MediaBrowser.Controller/Entities/IItemByName.cs b/MediaBrowser.Controller/Entities/IItemByName.cs
index 7747e738cb..2ac4af1af7 100644
--- a/MediaBrowser.Controller/Entities/IItemByName.cs
+++ b/MediaBrowser.Controller/Entities/IItemByName.cs
@@ -15,12 +15,6 @@ namespace MediaBrowser.Controller.Entities
/// <returns>IEnumerable{BaseItem}.</returns>
IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems);
- /// <summary>
- /// Gets the item filter.
- /// </summary>
- /// <returns>Func&lt;BaseItem, System.Boolean&gt;.</returns>
- Func<BaseItem, bool> GetItemFilter();
-
IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query);
}
diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
index ae38f6143d..823f4066c4 100644
--- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
+++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
@@ -19,8 +19,6 @@ namespace MediaBrowser.Controller.Entities
public User User { get; set; }
- public Func<BaseItem, bool> Filter { get; set; }
-
public bool? IsFolder { get; set; }
public bool? IsFavorite { get; set; }
public bool? IsFavoriteOrLiked { get; set; }
@@ -138,6 +136,7 @@ namespace MediaBrowser.Controller.Entities
public bool GroupByPresentationUniqueKey { get; set; }
public bool EnableTotalRecordCount { get; set; }
+ public bool ForceDirect { get; set; }
public InternalItemsQuery()
{
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index 82ab99980d..4a1982edca 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -381,14 +381,18 @@ namespace MediaBrowser.Controller.Entities.TV
}
else
{
- episodes = GetRecursiveChildren(user, i => i is Episode)
- .Cast<Episode>();
+ episodes = GetRecursiveChildren(user, new InternalItemsQuery(user)
+ {
+ IncludeItemTypes = new[] { typeof(Episode).Name }
+ }).Cast<Episode>();
}
}
else
{
- episodes = GetRecursiveChildren(user, i => i is Episode)
- .Cast<Episode>();
+ episodes = GetRecursiveChildren(user, new InternalItemsQuery(user)
+ {
+ IncludeItemTypes = new[] { typeof(Episode).Name }
+ }).Cast<Episode>();
}
episodes = FilterEpisodesBySeason(episodes, seasonNumber, DisplaySpecialsWithSeasons);
diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs
index 40fec3e288..e40d9ca381 100644
--- a/MediaBrowser.Controller/Entities/UserView.cs
+++ b/MediaBrowser.Controller/Entities/UserView.cs
@@ -66,7 +66,8 @@ namespace MediaBrowser.Controller.Entities
{
var result = GetItems(new InternalItemsQuery
{
- User = user
+ User = user,
+ EnableTotalRecordCount = false
}).Result;
@@ -83,17 +84,19 @@ namespace MediaBrowser.Controller.Entities
return true;
}
- public override IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter)
+ public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
{
var result = GetItems(new InternalItemsQuery
{
User = user,
Recursive = true,
- Filter = filter
+ EnableTotalRecordCount = false,
+
+ ForceDirect = true
}).Result;
- return result.Items;
+ return result.Items.Where(i => UserViewBuilder.FilterItem(i, query));
}
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index b9f6babfde..682eafb373 100644
--- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs
+++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
@@ -128,7 +128,11 @@ namespace MediaBrowser.Controller.Entities
{
if (query.Recursive)
{
- return GetResult(queryParent.GetRecursiveChildren(user, true), queryParent, query);
+ query.Recursive = true;
+ query.ParentId = queryParent.Id;
+ query.SetUser(user);
+
+ return _libraryManager.GetItemsResult(query);
}
return GetResult(queryParent.GetChildren(user, true), queryParent, query);
}
@@ -328,9 +332,13 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query)
{
- var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
- .Where(i => !i.IsFolder)
- .OfType<IHasAlbumArtist>();
+ var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ Recursive = true,
+ ParentId = parent.Id,
+ IncludeItemTypes = new[] { typeof(Audio.Audio).Name }
+
+ }).Cast<IHasAlbumArtist>();
var artists = _libraryManager.GetAlbumArtists(items);
@@ -339,9 +347,13 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetMusicArtists(Folder parent, User user, InternalItemsQuery query)
{
- var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
- .Where(i => !i.IsFolder)
- .OfType<IHasArtist>();
+ var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ Recursive = true,
+ ParentId = parent.Id,
+ IncludeItemTypes = new[] { typeof(Audio.Audio).Name, typeof(MusicVideo).Name }
+
+ }).Cast<IHasArtist>();
var artists = _libraryManager.GetArtists(items);
@@ -350,9 +362,13 @@ namespace MediaBrowser.Controller.Entities
private QueryResult<BaseItem> GetFavoriteArtists(Folder parent, User user, InternalItemsQuery query)
{
- var items = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos })
- .Where(i => !i.IsFolder)
- .OfType<IHasAlbumArtist>();
+ var items = _libraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ Recursive = true,
+ ParentId = parent.Id,
+ IncludeItemTypes = new[] { typeof(Audio.Audio).Name }
+
+ }).Cast<IHasAlbumArtist>();
var artists = _libraryManager.GetAlbumArtists(items).Where(i => _userDataManager.GetUserData(user, i).IsFavorite);
@@ -753,9 +769,9 @@ namespace MediaBrowser.Controller.Entities
return PostFilterAndSort(items, queryParent, null, query, _libraryManager);
}
- public bool FilterItem(BaseItem item, InternalItemsQuery query)
+ public static bool FilterItem(BaseItem item, InternalItemsQuery query)
{
- return Filter(item, query.User, query, _userDataManager, _libraryManager);
+ return Filter(item, query.User, query, BaseItem.UserDataManager, BaseItem.LibraryManager);
}
private QueryResult<BaseItem> PostFilterAndSort(IEnumerable<BaseItem> items,
@@ -1274,11 +1290,6 @@ namespace MediaBrowser.Controller.Entities
return false;
}
- if (query.Filter != null && !query.Filter(item))
- {
- return false;
- }
-
UserItemData userData = null;
if (query.IsLiked.HasValue)
diff --git a/MediaBrowser.Controller/Playlists/Playlist.cs b/MediaBrowser.Controller/Playlists/Playlist.cs
index 67b1d479b9..5ffe3d5daf 100644
--- a/MediaBrowser.Controller/Playlists/Playlist.cs
+++ b/MediaBrowser.Controller/Playlists/Playlist.cs
@@ -63,13 +63,13 @@ namespace MediaBrowser.Controller.Playlists
return GetPlayableItems(user).Result;
}
- public override IEnumerable<BaseItem> GetRecursiveChildren(User user, Func<BaseItem, bool> filter)
+ public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
{
var items = GetPlayableItems(user).Result;
- if (filter != null)
+ if (query != null)
{
- items = items.Where(filter);
+ items = items.Where(i => UserViewBuilder.FilterItem(i, query));
}
return items;
@@ -129,7 +129,11 @@ namespace MediaBrowser.Controller.Playlists
var items = user == null
? LibraryManager.RootFolder.GetRecursiveChildren(filter)
- : user.RootFolder.GetRecursiveChildren(user, filter);
+ : user.RootFolder.GetRecursiveChildren(user, new InternalItemsQuery(user)
+ {
+ IncludeItemTypes = new[] { typeof(Audio).Name },
+ ArtistNames = new[] { musicArtist.Name }
+ });
return LibraryManager.Sort(items, user, new[] { ItemSortBy.AlbumArtist, ItemSortBy.Album, ItemSortBy.SortName }, SortOrder.Ascending);
}