mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-03 14:28:46 +01:00
update artist queries
This commit is contained in:
@@ -56,36 +56,20 @@ namespace MediaBrowser.Controller.Entities.Audio
|
||||
|
||||
public IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query)
|
||||
{
|
||||
var itemByNameFilter = GetItemFilter();
|
||||
|
||||
if (query.User != null)
|
||||
if (query.IncludeItemTypes.Length == 0)
|
||||
{
|
||||
return query.User.RootFolder
|
||||
.GetRecursiveChildren(query.User, i =>
|
||||
{
|
||||
if (query.IsFolder.HasValue)
|
||||
{
|
||||
if (query.IsFolder.Value != i.IsFolder)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return itemByNameFilter(i);
|
||||
});
|
||||
query.IncludeItemTypes = new[] { typeof(Audio).Name, typeof(MusicVideo).Name, typeof(MusicAlbum).Name };
|
||||
query.ArtistNames = new[] { Name };
|
||||
}
|
||||
|
||||
return LibraryManager.RootFolder
|
||||
.GetRecursiveChildren(i =>
|
||||
{
|
||||
if (query.IsFolder.HasValue)
|
||||
{
|
||||
if (query.IsFolder.Value != i.IsFolder)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return itemByNameFilter(i);
|
||||
});
|
||||
// Need this for now since the artist filter isn't yet supported by the db
|
||||
if (ConfigurationManager.Configuration.SchemaVersion < 79)
|
||||
{
|
||||
var filter = GetItemFilter();
|
||||
return LibraryManager.GetItemList(query).Where(filter);
|
||||
}
|
||||
|
||||
return LibraryManager.GetItemList(query);
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> ActualChildren
|
||||
|
||||
@@ -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,21 +817,26 @@ namespace MediaBrowser.Controller.Entities
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (ConfigurationManager.Configuration.SchemaVersion < 79)
|
||||
{
|
||||
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.AiredEpisodeOrder, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.Debug("Query requires post-filtering due to ItemSortBy.AiredEpisodeOrder");
|
||||
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.Budget, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.Debug("Query requires post-filtering due to ItemSortBy.Budget");
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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<BaseItem, System.Boolean>.</returns>
|
||||
Func<BaseItem, bool> GetItemFilter();
|
||||
|
||||
IEnumerable<BaseItem> GetTaggedItems(InternalItemsQuery query);
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user