mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-25 03:24:47 +01:00
added new item by name filters
This commit is contained in:
@@ -114,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return LibraryManager.GetAllArtists(items)
|
||||
.Select(name => LibraryManager.GetArtist(name));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(MusicArtist item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.OfType<IHasArtist>().Where(i => i.HasArtist(item.Name)).Cast<BaseItem>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,8 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
var filteredItems = FilterItems(request, extractedItems, user);
|
||||
|
||||
filteredItems = FilterByLibraryItems(request, filteredItems, user);
|
||||
|
||||
filteredItems = ItemsService.ApplySortOrder(request, filteredItems, user, LibraryManager).Cast<TItemType>();
|
||||
|
||||
var ibnItemsArray = filteredItems.ToList();
|
||||
@@ -127,6 +129,39 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
return result;
|
||||
}
|
||||
|
||||
private IEnumerable<TItemType> FilterByLibraryItems(GetItemsByName request, IEnumerable<TItemType> items, User user)
|
||||
{
|
||||
var filters = request.GetFilters().ToList();
|
||||
|
||||
if (filters.Contains(ItemFilter.IsPlayed))
|
||||
{
|
||||
var libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
|
||||
|
||||
items = items.Where(i => GetLibraryItems(i, libraryItems).All(l =>
|
||||
{
|
||||
var userdata = UserDataRepository.GetUserData(user.Id, l.GetUserDataKey());
|
||||
|
||||
return userdata != null && userdata.Played;
|
||||
}));
|
||||
}
|
||||
|
||||
if (filters.Contains(ItemFilter.IsUnplayed))
|
||||
{
|
||||
var libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
|
||||
|
||||
items = items.Where(i => GetLibraryItems(i, libraryItems).All(l =>
|
||||
{
|
||||
var userdata = UserDataRepository.GetUserData(user.Id, l.GetUserDataKey());
|
||||
|
||||
return userdata == null || !userdata.Played;
|
||||
}));
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
protected abstract IEnumerable<BaseItem> GetLibraryItems(TItemType item, IEnumerable<BaseItem> libraryItems);
|
||||
|
||||
/// <summary>
|
||||
/// Filters the items.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Dto;
|
||||
@@ -109,5 +110,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.Select(name => LibraryManager.GetGameGenre(name));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(GameGenre item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.Where(i => (i is Game) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using MediaBrowser.Controller.Dto;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Dto;
|
||||
@@ -113,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.Select(name => LibraryManager.GetGenre(name));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(Genre item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.Where(i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,5 +109,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.Select(name => LibraryManager.GetMusicGenre(name));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(MusicGenre item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.Where(i => (i is IHasMusicGenres) && i.Genres.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,5 +163,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
|
||||
people.Where(p => personTypes.Contains(p.Type ?? string.Empty, StringComparer.OrdinalIgnoreCase) || personTypes.Contains(p.Role ?? string.Empty, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(Person item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.Where(i => i.People.Any(p => string.Equals(p.Name, item.Name, StringComparison.OrdinalIgnoreCase)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,5 +114,10 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.Select(name => LibraryManager.GetStudio(name));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(Studio item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
return libraryItems.Where(i => i.Studios.Contains(item.Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,5 +114,19 @@ namespace MediaBrowser.Api.UserLibrary
|
||||
.Distinct()
|
||||
.Select(year => LibraryManager.GetYear(year));
|
||||
}
|
||||
|
||||
protected readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
protected override IEnumerable<BaseItem> GetLibraryItems(Year item, IEnumerable<BaseItem> libraryItems)
|
||||
{
|
||||
int year;
|
||||
|
||||
if (!int.TryParse(item.Name, NumberStyles.Integer, UsCulture, out year))
|
||||
{
|
||||
return libraryItems;
|
||||
}
|
||||
|
||||
return libraryItems.Where(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user