diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ArtistsService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs | 68 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GameGenresService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GenresService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/MusicGenresService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/PersonsService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/StudiosService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/UserLibraryService.cs | 106 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/YearsService.cs | 2 |
10 files changed, 72 insertions, 126 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 128423238..2ab08fd8d 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -83,7 +83,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetArtist(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 9d211a419..880d57b9a 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -56,46 +56,52 @@ namespace MediaBrowser.Api.UserLibrary protected ItemsResult GetResult(GetItemsByName request) { User user = null; - BaseItem item; + BaseItem parentItem; List<BaseItem> libraryItems; if (request.UserId.HasValue) { user = UserManager.GetUserById(request.UserId.Value); - item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); - + parentItem = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList(); } else { - item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : LibraryManager.GetItemById(request.ParentId); - - libraryItems = LibraryManager.RootFolder.RecursiveChildren.ToList(); + parentItem = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : LibraryManager.GetItemById(request.ParentId); + libraryItems = LibraryManager.RootFolder.GetRecursiveChildren().ToList(); } IEnumerable<BaseItem> items; - if (item.IsFolder) + var excludeItemTypes = request.GetExcludeItemTypes(); + var includeItemTypes = request.GetIncludeItemTypes(); + var mediaTypes = request.GetMediaTypes(); + + Func<BaseItem, bool> filter = i => FilterItem(request, i, excludeItemTypes, includeItemTypes, mediaTypes); + + if (parentItem.IsFolder) { - var folder = (Folder)item; + var folder = (Folder)parentItem; if (request.UserId.HasValue) { - items = request.Recursive ? folder.GetRecursiveChildren(user) : folder.GetChildren(user, true); + items = request.Recursive ? + folder.GetRecursiveChildren(user, filter) : + folder.GetChildren(user, true).Where(filter); } else { - items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children; + items = request.Recursive ? + folder.GetRecursiveChildren(filter) : + folder.Children.Where(filter); } } else { - items = new[] { item }; + items = new[] { parentItem }.Where(filter); } - items = FilterItems(request, items); - var extractedItems = GetAllItems(request, items); var filteredItems = FilterItems(request, extractedItems, user); @@ -129,7 +135,7 @@ namespace MediaBrowser.Api.UserLibrary var tuples = ibnItems.Select(i => new Tuple<TItemType, List<BaseItem>>(i, i.GetTaggedItems(libraryItems).ToList())); - var dtoOptions = request.GetDtoOptions(); + var dtoOptions = GetDtoOptions(request); var dtos = tuples.Select(i => GetDto(i.Item1, user, dtoOptions, i.Item2)); @@ -290,33 +296,41 @@ namespace MediaBrowser.Api.UserLibrary /// Filters the items. /// </summary> /// <param name="request">The request.</param> - /// <param name="items">The items.</param> + /// <param name="f">The f.</param> + /// <param name="excludeItemTypes">The exclude item types.</param> + /// <param name="includeItemTypes">The include item types.</param> + /// <param name="mediaTypes">The media types.</param> /// <returns>IEnumerable{BaseItem}.</returns> - protected virtual IEnumerable<BaseItem> FilterItems(GetItemsByName request, IEnumerable<BaseItem> items) + protected bool FilterItem(GetItemsByName request, BaseItem f, string[] excludeItemTypes, string[] includeItemTypes, string[] mediaTypes) { // Exclude item types - if (!string.IsNullOrEmpty(request.ExcludeItemTypes)) + if (excludeItemTypes.Length > 0) { - var vals = request.ExcludeItemTypes.Split(','); - items = items.Where(f => !vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)); + if (excludeItemTypes.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)) + { + return false; + } } // Include item types - if (!string.IsNullOrEmpty(request.IncludeItemTypes)) + if (includeItemTypes.Length > 0) { - var vals = request.IncludeItemTypes.Split(','); - items = items.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)); + if (!includeItemTypes.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)) + { + return false; + } } // Include MediaTypes - if (!string.IsNullOrEmpty(request.MediaTypes)) + if (mediaTypes.Length > 0) { - var vals = request.MediaTypes.Split(','); - - items = items.Where(f => vals.Contains(f.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase)); + if (!mediaTypes.Contains(f.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase)) + { + return false; + } } - return items; + return true; } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index 2f1c73ace..3063e19c7 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -69,7 +69,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetGameGenre(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index db0b0fe61..c659852de 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -74,7 +74,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetGenre(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index cf9b0b438..15b1f6dba 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -321,14 +321,14 @@ namespace MediaBrowser.Api.UserLibrary var result = await GetItemsToSerialize(request, user, parentItem).ConfigureAwait(false); var isFiltered = result.Item2; - var dtoOptions = request.GetDtoOptions(); + var dtoOptions = GetDtoOptions(request); if (isFiltered) { return new ItemsResult { TotalRecordCount = result.Item1.TotalRecordCount, - Items = result.Item1.Items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)).ToArray() + Items = _dtoService.GetBaseItemDtos(result.Item1.Items, dtoOptions, user).ToArray() }; } @@ -362,7 +362,7 @@ namespace MediaBrowser.Api.UserLibrary var pagedItems = ApplyPaging(request, itemsArray); - var returnItems = pagedItems.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)).ToArray(); + var returnItems = _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ToArray(); return new ItemsResult { @@ -398,7 +398,7 @@ namespace MediaBrowser.Api.UserLibrary { if (user == null) { - items = ((Folder)item).RecursiveChildren; + items = ((Folder)item).GetRecursiveChildren(); items = _libraryManager.ReplaceVideosWithPrimaryVersions(items); } @@ -464,7 +464,7 @@ namespace MediaBrowser.Api.UserLibrary SortBy = request.GetOrderBy(), SortOrder = request.SortOrder ?? SortOrder.Ascending, - Filter = (i, u) => ApplyAdditionalFilters(request, i, u, true, _libraryManager), + Filter = i => ApplyAdditionalFilters(request, i, user, true, _libraryManager), Limit = request.Limit, StartIndex = request.StartIndex, diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index f8575aa7c..3733128f0 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -69,7 +69,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetMusicGenre(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 33ce6cd80..b424c9313 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -86,7 +86,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetPerson(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index 272134b70..a4ebef684 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -73,7 +73,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = GetStudio(request.Name, LibraryManager); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 45a330a50..cdfd00ce9 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -228,7 +228,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public Guid UserId { get; set; } + public string UserId { get; set; } [ApiMember(Name = "Limit", Description = "Limit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int Limit { get; set; } @@ -259,7 +259,7 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string EnableImageTypes { get; set; } - + public GetLatestMedia() { Limit = 20; @@ -304,74 +304,17 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - // Avoid implicitly captured closure - var libraryItems = string.IsNullOrEmpty(request.ParentId) && user != null ? - GetItemsConfiguredForLatest(user) : - GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId); - - libraryItems = libraryItems.OrderByDescending(i => i.DateCreated) - .Where(i => i.LocationType != LocationType.Virtual); - - - //if (request.IsFolder.HasValue) - //{ - //var val = request.IsFolder.Value; - libraryItems = libraryItems.Where(f => f.IsFolder == false); - //} - - if (!string.IsNullOrEmpty(request.IncludeItemTypes)) - { - var vals = request.IncludeItemTypes.Split(','); - libraryItems = libraryItems.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase)); - } - - var currentUser = user; - - if (request.IsPlayed.HasValue) - { - var takeLimit = request.Limit * 20; - - var val = request.IsPlayed.Value; - libraryItems = libraryItems.Where(f => f.IsPlayed(currentUser) == val) - .Take(takeLimit); - } - - // Avoid implicitly captured closure - var items = libraryItems - .ToList(); - - var list = new List<Tuple<BaseItem, List<BaseItem>>>(); - - foreach (var item in items) + var list = _userViewManager.GetLatestItems(new LatestItemsQuery { - // Only grab the index container for media - var container = item.IsFolder || !request.GroupItems ? null : item.LatestItemsIndexContainer; - - if (container == null) - { - list.Add(new Tuple<BaseItem, List<BaseItem>>(null, new List<BaseItem> { item })); - } - else - { - var current = list.FirstOrDefault(i => i.Item1 != null && i.Item1.Id == container.Id); - - if (current != null) - { - current.Item2.Add(item); - } - else - { - list.Add(new Tuple<BaseItem, List<BaseItem>>(container, new List<BaseItem> { item })); - } - } - - if (list.Count >= request.Limit) - { - break; - } - } + GroupItems = request.GroupItems, + IncludeItemTypes = (request.IncludeItemTypes ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToArray(), + IsPlayed = request.IsPlayed, + Limit = request.Limit, + ParentId = request.ParentId, + UserId = request.UserId + }); - var options = request.GetDtoOptions(); + var options = GetDtoOptions(request); var dtos = list.Select(i => { @@ -394,15 +337,6 @@ namespace MediaBrowser.Api.UserLibrary return ToOptimizedResult(dtos.ToList()); } - private IEnumerable<BaseItem> GetItemsConfiguredForLatest(User user) - { - return user.RootFolder.GetChildren(user, true) - .OfType<Folder>() - .Where(i => !user.Configuration.LatestItemsExcludes.Contains(i.Id.ToString("N"))) - .SelectMany(i => i.GetRecursiveChildren(user)) - .DistinctBy(i => i.Id); - } - public async Task<object> Get(GetUserViews request) { var user = _userManager.GetUserById(request.UserId); @@ -420,7 +354,7 @@ namespace MediaBrowser.Api.UserLibrary var folders = await _userViewManager.GetUserViews(query, CancellationToken.None).ConfigureAwait(false); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var dtos = folders.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)) .ToArray(); @@ -447,14 +381,13 @@ namespace MediaBrowser.Api.UserLibrary // Get them from the child tree if (series != null) { - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); // Avoid implicitly captured closure var currentUser = user; var dtos = series - .GetRecursiveChildren() - .Where(i => i is Episode && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) + .GetRecursiveChildren(i => i is Episode && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) .OrderBy(i => { if (i.PremiereDate.HasValue) @@ -479,7 +412,7 @@ namespace MediaBrowser.Api.UserLibrary // Get them from the db if (movie != null) { - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var dtos = movie.SpecialFeatureIds .Select(_libraryManager.GetItemById) @@ -518,11 +451,10 @@ namespace MediaBrowser.Api.UserLibrary trailerIds = hasTrailers.GetTrailerIds(); } - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var dtos = trailerIds .Select(_libraryManager.GetItemById) - .OrderBy(i => i.SortName) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); return dtos.ToList(); @@ -539,7 +471,7 @@ namespace MediaBrowser.Api.UserLibrary var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _libraryManager.GetItemById(request.Id); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var result = _dtoService.GetBaseItemDto(item, dtoOptions, user); @@ -557,7 +489,7 @@ namespace MediaBrowser.Api.UserLibrary var item = user.RootFolder; - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var result = _dtoService.GetBaseItemDto(item, dtoOptions, user); @@ -577,7 +509,7 @@ namespace MediaBrowser.Api.UserLibrary var items = await _libraryManager.GetIntros(item, user).ConfigureAwait(false); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); var dtos = items.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)) .ToArray(); diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index b1b0aeb63..d95496333 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -73,7 +73,7 @@ namespace MediaBrowser.Api.UserLibrary { var item = LibraryManager.GetYear(request.Year); - var dtoOptions = new DtoOptions(); + var dtoOptions = GetDtoOptions(request); if (request.UserId.HasValue) { |
