diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ArtistsService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs | 35 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GameGenresService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GenresService.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/MusicGenresService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/PersonsService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/StudiosService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/YearsService.cs | 14 |
8 files changed, 80 insertions, 0 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 5c1b10487..48fc72913 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -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>(); + } } } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 15926e983..dec35100d 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -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> diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index 54aeaeed3..79ee27df6 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -109,5 +109,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)); + } } } diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index db3948976..d1f7fab01 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -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)); + } } } diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index 59af94ef5..945ac5a67 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -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)); + } } } diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 48e486bb5..03e710ae8 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -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))); + } } } diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index 86f939437..8b1eeec0f 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -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)); + } } } diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index 8f5178ac5..8b03fb50b 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -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); + } } } |
