diff options
| author | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
|---|---|---|
| committer | stefan <stefan@hegedues.at> | 2018-09-12 19:26:21 +0200 |
| commit | 48facb797ed912e4ea6b04b17d1ff190ac2daac4 (patch) | |
| tree | 8dae77a31670a888d733484cb17dd4077d5444e8 /MediaBrowser.Api/UserLibrary | |
| parent | c32d8656382a0eacb301692e0084377fc433ae9b (diff) | |
Update to 3.5.2 and .net core 2.1
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ArtistsService.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs | 167 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs | 62 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GameGenresService.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GenresService.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 93 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/MusicGenresService.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/PersonsService.cs | 60 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/StudiosService.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/UserLibraryService.cs | 119 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/UserViewsService.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/YearsService.cs | 9 |
12 files changed, 190 insertions, 393 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 4018759d9..cd3c80463 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -40,7 +40,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -56,9 +56,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetArtist request) { - var result = GetItem(request); - - return ToOptimizedResult(result); + return GetItem(request); } /// <summary> @@ -71,8 +69,8 @@ namespace MediaBrowser.Api.UserLibrary var dtoOptions = GetDtoOptions(AuthorizationContext, request); var item = GetArtist(request.Name, LibraryManager, dtoOptions); - - if (!string.IsNullOrWhiteSpace(request.UserId)) + + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -94,9 +92,7 @@ namespace MediaBrowser.Api.UserLibrary //request.IncludeItemTypes = "Audio,MusicVideo"; } - var result = GetResultSlim(request); - - return ToOptimizedResult(result); + return GetResultSlim(request); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index ed0c4069b..fe8b446a1 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -56,10 +56,10 @@ namespace MediaBrowser.Api.UserLibrary { BaseItem parentItem; - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); - parentItem = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); + parentItem = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.GetUserRootFolder() : LibraryManager.GetItemById(request.ParentId); } else { @@ -73,18 +73,12 @@ namespace MediaBrowser.Api.UserLibrary { var parent = GetParentItem(request); - var collectionFolder = parent as ICollectionFolder; + var collectionFolder = parent as IHasCollectionType; if (collectionFolder != null) { return collectionFolder.CollectionType; } - var view = parent as UserView; - if (view != null) - { - return view.ViewType; - } - return null; } @@ -95,10 +89,10 @@ namespace MediaBrowser.Api.UserLibrary User user = null; BaseItem parentItem; - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { user = UserManager.GetUserById(request.UserId); - parentItem = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); + parentItem = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.GetUserRootFolder() : LibraryManager.GetItemById(request.ParentId); } else { @@ -123,25 +117,27 @@ namespace MediaBrowser.Api.UserLibrary Tags = request.GetTags(), OfficialRatings = request.GetOfficialRatings(), Genres = request.GetGenres(), - GenreIds = request.GetGenreIds(), - StudioIds = request.GetStudioIds(), + GenreIds = GetGuids(request.GenreIds), + StudioIds = GetGuids(request.StudioIds), Person = request.Person, - PersonIds = request.GetPersonIds(), + PersonIds = GetGuids(request.PersonIds), PersonTypes = request.GetPersonTypes(), Years = request.GetYears(), MinCommunityRating = request.MinCommunityRating, - DtoOptions = dtoOptions + DtoOptions = dtoOptions, + SearchTerm = request.SearchTerm, + EnableTotalRecordCount = request.EnableTotalRecordCount }; if (!string.IsNullOrWhiteSpace(request.ParentId)) { if (parentItem is Folder) { - query.AncestorIds = new[] { request.ParentId }; + query.AncestorIds = new[] { new Guid(request.ParentId) }; } else { - query.ItemIds = new[] { request.ParentId }; + query.ItemIds = new[] { new Guid(request.ParentId) }; } } @@ -158,7 +154,7 @@ namespace MediaBrowser.Api.UserLibrary { return null; } - }).Where(i => i != null).Select(i => i.Id.ToString("N")).ToArray(); + }).Where(i => i != null).Select(i => i.Id).ToArray(); } foreach (var filter in request.GetFilters()) @@ -197,10 +193,9 @@ namespace MediaBrowser.Api.UserLibrary var result = GetItems(request, query); - var syncProgess = DtoService.GetSyncedItemProgress(dtoOptions); var dtos = result.Items.Select(i => { - var dto = DtoService.GetItemByNameDto(i.Item1, dtoOptions, null, syncProgess, user); + var dto = DtoService.GetItemByNameDto(i.Item1, dtoOptions, null, user); if (!string.IsNullOrWhiteSpace(request.IncludeItemTypes)) { @@ -247,10 +242,10 @@ namespace MediaBrowser.Api.UserLibrary User user = null; BaseItem parentItem; - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { user = UserManager.GetUserById(request.UserId); - parentItem = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId); + parentItem = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.GetUserRootFolder() : LibraryManager.GetItemById(request.ParentId); } else { @@ -277,7 +272,7 @@ namespace MediaBrowser.Api.UserLibrary { var folder = (Folder)parentItem; - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { items = request.Recursive ? folder.GetRecursiveChildren(user, query).ToList() : @@ -297,9 +292,7 @@ namespace MediaBrowser.Api.UserLibrary var extractedItems = GetAllItems(request, items); - var filteredItems = FilterItems(request, extractedItems, user); - - filteredItems = LibraryManager.Sort(filteredItems, user, request.GetOrderBy()); + var filteredItems = LibraryManager.Sort(extractedItems, user, request.GetOrderBy()); var ibnItemsArray = filteredItems.ToList(); @@ -326,8 +319,7 @@ namespace MediaBrowser.Api.UserLibrary var tuples = ibnItems.Select(i => new Tuple<BaseItem, List<BaseItem>>(i, new List<BaseItem>())); - var syncProgess = DtoService.GetSyncedItemProgress(dtoOptions); - var dtos = tuples.Select(i => DtoService.GetItemByNameDto(i.Item1, dtoOptions, i.Item2, syncProgess, user)); + var dtos = tuples.Select(i => DtoService.GetItemByNameDto(i.Item1, dtoOptions, i.Item2, user)); result.Items = dtos.Where(i => i != null).ToArray(); @@ -338,125 +330,6 @@ namespace MediaBrowser.Api.UserLibrary /// Filters the items. /// </summary> /// <param name="request">The request.</param> - /// <param name="items">The items.</param> - /// <param name="user">The user.</param> - /// <returns>IEnumerable{`0}.</returns> - private IEnumerable<BaseItem> FilterItems(GetItemsByName request, IEnumerable<BaseItem> items, User user) - { - if (!string.IsNullOrEmpty(request.NameStartsWithOrGreater)) - { - items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1); - } - if (!string.IsNullOrEmpty(request.NameStartsWith)) - { - items = items.Where(i => string.Compare(request.NameStartsWith, i.SortName.Substring(0, 1), StringComparison.CurrentCultureIgnoreCase) == 0); - } - - if (!string.IsNullOrEmpty(request.NameLessThan)) - { - items = items.Where(i => string.Compare(request.NameLessThan, i.SortName, StringComparison.CurrentCultureIgnoreCase) == 1); - } - - var imageTypes = request.GetImageTypes(); - if (imageTypes.Length > 0) - { - items = items.Where(item => imageTypes.Any(item.HasImage)); - } - - var filters = request.GetFilters(); - - if (filters.Contains(ItemFilter.Dislikes)) - { - items = items.Where(i => - { - var userdata = UserDataRepository.GetUserData(user, i); - - return userdata != null && userdata.Likes.HasValue && !userdata.Likes.Value; - }); - } - - if (filters.Contains(ItemFilter.Likes)) - { - items = items.Where(i => - { - var userdata = UserDataRepository.GetUserData(user, i); - - return userdata != null && userdata.Likes.HasValue && userdata.Likes.Value; - }); - } - - if (filters.Contains(ItemFilter.IsFavoriteOrLikes)) - { - items = items.Where(i => - { - var userdata = UserDataRepository.GetUserData(user, i); - - var likes = userdata.Likes ?? false; - var favorite = userdata.IsFavorite; - - return likes || favorite; - }); - } - - if (filters.Contains(ItemFilter.IsFavorite)) - { - items = items.Where(i => - { - var userdata = UserDataRepository.GetUserData(user, i); - - return userdata != null && userdata.IsFavorite; - }); - } - - // Avoid implicitly captured closure - var currentRequest = request; - return items.Where(i => ApplyAdditionalFilters(currentRequest, i, user, false)); - } - - private bool ApplyAdditionalFilters(BaseItemsRequest request, BaseItem i, User user, bool isPreFiltered) - { - if (!isPreFiltered) - { - // Apply tag filter - var tags = request.GetTags(); - if (tags.Length > 0) - { - if (!tags.Any(v => i.Tags.Contains(v, StringComparer.OrdinalIgnoreCase))) - { - return false; - } - } - - // Apply official rating filter - var officialRatings = request.GetOfficialRatings(); - if (officialRatings.Length > 0 && !officialRatings.Contains(i.OfficialRating ?? string.Empty)) - { - return false; - } - - // Apply genre filter - var genres = request.GetGenres(); - if (genres.Length > 0 && !genres.Any(v => i.Genres.Contains(v, StringComparer.OrdinalIgnoreCase))) - { - return false; - } - - // Apply year filter - var years = request.GetYears(); - if (years.Length > 0 && !(i.ProductionYear.HasValue && years.Contains(i.ProductionYear.Value))) - { - return false; - } - } - - return true; - } - - - /// <summary> - /// Filters the items. - /// </summary> - /// <param name="request">The request.</param> /// <param name="f">The f.</param> /// <param name="excludeItemTypes">The exclude item types.</param> /// <param name="includeItemTypes">The include item types.</param> diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs index 88d080db5..11c12c718 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsRequest.cs @@ -58,6 +58,8 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "IsHD", Description = "Optional filter by items that are HD or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? IsHD { get; set; } + public bool? Is4K { get; set; } + [ApiMember(Name = "LocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string LocationTypes { get; set; } @@ -103,9 +105,7 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "HasTvdbId", Description = "Optional filter by items that have a tvdb id or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? HasTvdbId { get; set; } - [ApiMember(Name = "IsInBoxSet", Description = "Optional filter by items that are in boxsets, or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] - public bool? IsInBoxSet { get; set; } - + [ApiMember(Name = "ExcludeItemIds", Description = "Optional. If specified, results will be filtered by exxcluding item ids. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string ExcludeItemIds { get; set; } public bool EnableTotalRecordCount { get; set; } @@ -131,6 +131,8 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "Recursive", Description = "When searching within folders, this determines whether or not the search will be recursive. true/false", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")] public bool Recursive { get; set; } + public string SearchTerm { get; set; } + /// <summary> /// Gets or sets the sort order. /// </summary> @@ -277,6 +279,10 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "ArtistIds", Description = "Optional. If specified, results will be filtered based on artist. This allows multiple, pipe delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string ArtistIds { get; set; } + public string AlbumArtistIds { get; set; } + + public string ContributingArtistIds { get; set; } + [ApiMember(Name = "Albums", Description = "Optional. If specified, results will be filtered based on album. This allows multiple, pipe delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string Albums { get; set; } @@ -300,8 +306,8 @@ namespace MediaBrowser.Api.UserLibrary /// Gets or sets the user id. /// </summary> /// <value>The user id.</value> - [ApiMember(Name = "UserId", Description = "User Id", IsRequired = false, DataType = "string", ParameterType = "path", Verb = "GET")] - public string UserId { get; set; } + [ApiMember(Name = "UserId", Description = "User Id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public Guid UserId { get; set; } /// <summary> /// Gets or sets the min offical rating. @@ -321,6 +327,12 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "CollapseBoxSetItems", Description = "Whether or not to hide items behind their boxsets.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] public bool? CollapseBoxSetItems { get; set; } + + public int? MinWidth { get; set; } + public int? MinHeight { get; set; } + public int? MaxWidth { get; set; } + public int? MaxHeight { get; set; } + /// <summary> /// Gets or sets the video formats. /// </summary> @@ -369,11 +381,6 @@ namespace MediaBrowser.Api.UserLibrary return (IncludeItemTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); } - public string[] GetExcludeItemIds() - { - return (ExcludeItemIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - } - public string[] GetExcludeItemTypes() { return (ExcludeItemTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); @@ -389,36 +396,11 @@ namespace MediaBrowser.Api.UserLibrary return (Studios ?? string.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); } - public string[] GetArtistIds() - { - return (ArtistIds ?? string.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); - } - - public string[] GetStudioIds() - { - return (StudioIds ?? string.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); - } - - public string[] GetGenreIds() - { - return (GenreIds ?? string.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); - } - public string[] GetPersonTypes() { return (PersonTypes ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); } - public string[] GetPersonIds() - { - return (PersonIds ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - } - - public string[] GetItemIds() - { - return (Ids ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - } - public VideoType[] GetVideoTypes() { var val = VideoTypes; @@ -467,18 +449,18 @@ namespace MediaBrowser.Api.UserLibrary /// Gets the order by. /// </summary> /// <returns>IEnumerable{ItemSortBy}.</returns> - public Tuple<string, SortOrder>[] GetOrderBy() + public ValueTuple<string, SortOrder>[] GetOrderBy() { return GetOrderBy(SortBy, SortOrder); } - public static Tuple<string, SortOrder>[] GetOrderBy(string sortBy, string requestedSortOrder) + public static ValueTuple<string, SortOrder>[] GetOrderBy(string sortBy, string requestedSortOrder) { var val = sortBy; if (string.IsNullOrEmpty(val)) { - return new Tuple<string, Model.Entities.SortOrder>[] { }; + return Array.Empty<ValueTuple<string, Model.Entities.SortOrder>>(); } var vals = val.Split(','); @@ -489,7 +471,7 @@ namespace MediaBrowser.Api.UserLibrary var sortOrders = requestedSortOrder.Split(','); - var result = new Tuple<string, Model.Entities.SortOrder>[vals.Length]; + var result = new ValueTuple<string, Model.Entities.SortOrder>[vals.Length]; for (var i = 0; i < vals.Length; i++) { @@ -498,7 +480,7 @@ namespace MediaBrowser.Api.UserLibrary var sortOrderValue = sortOrders.Length > sortOrderIndex ? sortOrders[sortOrderIndex] : null; var sortOrder = string.Equals(sortOrderValue, "Descending", StringComparison.OrdinalIgnoreCase) ? MediaBrowser.Model.Entities.SortOrder.Descending : MediaBrowser.Model.Entities.SortOrder.Ascending; - result[i] = new Tuple<string, Model.Entities.SortOrder>(vals[i], sortOrder); + result[i] = new ValueTuple<string, Model.Entities.SortOrder>(vals[i], sortOrder); } return result; diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index 0b2ca4daf..476e881b9 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -31,7 +31,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } [Authenticated] @@ -46,7 +46,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -60,7 +60,7 @@ namespace MediaBrowser.Api.UserLibrary var item = GetGameGenre(request.Name, LibraryManager, dtoOptions); - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -79,7 +79,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResultSlim(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query) diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index d913f52d9..0bb7d7865 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -38,7 +38,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -56,7 +56,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -70,7 +70,7 @@ namespace MediaBrowser.Api.UserLibrary var item = GetGenre(request.Name, LibraryManager, dtoOptions); - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResultSlim(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query) diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 1e531ba66..aa17e85f3 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -88,25 +88,25 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId); + var parentIdGuid = string.IsNullOrWhiteSpace(request.ParentId) ? Guid.Empty : new Guid(request.ParentId); var options = GetDtoOptions(_authContext, request); - var ancestorIds = new List<string>(); + var ancestorIds = new List<Guid>(); var excludeFolderIds = user.Configuration.LatestItemsExcludes; - if (!parentIdGuid.HasValue && excludeFolderIds.Length > 0) + if (parentIdGuid.Equals(Guid.Empty) && excludeFolderIds.Length > 0) { - ancestorIds = user.RootFolder.GetChildren(user, true) + ancestorIds = _libraryManager.GetUserRootFolder().GetChildren(user, true) .Where(i => i is Folder) .Where(i => !excludeFolderIds.Contains(i.Id.ToString("N"))) - .Select(i => i.Id.ToString("N")) + .Select(i => i.Id) .ToList(); } var itemsResult = _libraryManager.GetItemsResult(new InternalItemsQuery(user) { - OrderBy = new[] { ItemSortBy.DatePlayed }.Select(i => new Tuple<string, SortOrder>(i, SortOrder.Descending)).ToArray(), + OrderBy = new[] { ItemSortBy.DatePlayed }.Select(i => new ValueTuple<string, SortOrder>(i, SortOrder.Descending)).ToArray(), IsResumable = true, StartIndex = request.StartIndex, Limit = request.Limit, @@ -119,7 +119,8 @@ namespace MediaBrowser.Api.UserLibrary EnableTotalRecordCount = request.EnableTotalRecordCount, AncestorIds = ancestorIds.ToArray(), IncludeItemTypes = request.GetIncludeItemTypes(), - ExcludeItemTypes = request.GetExcludeItemTypes() + ExcludeItemTypes = request.GetExcludeItemTypes(), + SearchTerm = request.SearchTerm }); var returnItems = _dtoService.GetBaseItemDtos(itemsResult.Items, options, user); @@ -130,7 +131,7 @@ namespace MediaBrowser.Api.UserLibrary Items = returnItems }; - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -147,7 +148,7 @@ namespace MediaBrowser.Api.UserLibrary var result = GetItems(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -156,7 +157,7 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="request">The request.</param> private QueryResult<BaseItemDto> GetItems(GetItems request) { - var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; + var user = !request.UserId.Equals(Guid.Empty) ? _userManager.GetUserById(request.UserId) : null; var dtoOptions = GetDtoOptions(_authContext, request); @@ -191,26 +192,23 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> private QueryResult<BaseItem> GetQueryResult(GetItems request, DtoOptions dtoOptions, User user) { - var item = string.IsNullOrEmpty(request.ParentId) ? - null : - _libraryManager.GetItemById(request.ParentId); - if (string.Equals(request.IncludeItemTypes, "Playlist", StringComparison.OrdinalIgnoreCase)) { - if (item == null || user != null) - { - item = _libraryManager.RootFolder.Children.OfType<Folder>().FirstOrDefault(i => string.Equals(i.GetType().Name, "PlaylistsFolder", StringComparison.OrdinalIgnoreCase)); - } + request.ParentId = null; } else if (string.Equals(request.IncludeItemTypes, "BoxSet", StringComparison.OrdinalIgnoreCase)) { - item = user == null ? _libraryManager.RootFolder : user.RootFolder; + request.ParentId = null; } + var item = string.IsNullOrEmpty(request.ParentId) ? + null : + _libraryManager.GetItemById(request.ParentId); + if (item == null) { item = string.IsNullOrEmpty(request.ParentId) ? - user == null ? _libraryManager.RootFolder : user.RootFolder : + user == null ? _libraryManager.RootFolder : _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(request.ParentId); } @@ -222,6 +220,15 @@ namespace MediaBrowser.Api.UserLibrary folder = user == null ? _libraryManager.RootFolder : _libraryManager.GetUserRootFolder(); } + var hasCollectionType = folder as IHasCollectionType; + var isPlaylistQuery = (hasCollectionType != null && string.Equals(hasCollectionType.CollectionType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase)); + + if (isPlaylistQuery) + { + request.Recursive = true; + request.IncludeItemTypes = "Playlist"; + } + if (request.Recursive || !string.IsNullOrEmpty(request.Ids) || user == null) { return folder.GetItems(GetItemsQuery(request, dtoOptions, user)); @@ -266,8 +273,10 @@ namespace MediaBrowser.Api.UserLibrary HasImdbId = request.HasImdbId, IsPlaceHolder = request.IsPlaceHolder, IsLocked = request.IsLocked, - IsInBoxSet = request.IsInBoxSet, - IsHD = request.IsHD, + MinWidth = request.MinWidth, + MinHeight = request.MinHeight, + MaxWidth = request.MaxWidth, + MaxHeight = request.MaxHeight, Is3D = request.Is3D, HasTvdbId = request.HasTvdbId, HasTmdbId = request.HasTmdbId, @@ -279,33 +288,37 @@ namespace MediaBrowser.Api.UserLibrary HasThemeSong = request.HasThemeSong, HasThemeVideo = request.HasThemeVideo, HasTrailer = request.HasTrailer, + IsHD = request.IsHD, + Is4K = request.Is4K, Tags = request.GetTags(), OfficialRatings = request.GetOfficialRatings(), Genres = request.GetGenres(), - ArtistIds = request.GetArtistIds(), - GenreIds = request.GetGenreIds(), - StudioIds = request.GetStudioIds(), + ArtistIds = GetGuids(request.ArtistIds), + AlbumArtistIds = GetGuids(request.AlbumArtistIds), + ContributingArtistIds = GetGuids(request.ContributingArtistIds), + GenreIds = GetGuids(request.GenreIds), + StudioIds = GetGuids(request.StudioIds), Person = request.Person, - PersonIds = request.GetPersonIds(), + PersonIds = GetGuids(request.PersonIds), PersonTypes = request.GetPersonTypes(), Years = request.GetYears(), ImageTypes = request.GetImageTypes(), VideoTypes = request.GetVideoTypes(), AdjacentTo = request.AdjacentTo, - ItemIds = request.GetItemIds(), + ItemIds = GetGuids(request.Ids), MinPlayers = request.MinPlayers, MaxPlayers = request.MaxPlayers, MinCommunityRating = request.MinCommunityRating, MinCriticRating = request.MinCriticRating, - ParentId = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId), + ParentId = string.IsNullOrWhiteSpace(request.ParentId) ? Guid.Empty : new Guid(request.ParentId), ParentIndexNumber = request.ParentIndexNumber, - AiredDuringSeason = request.AiredDuringSeason, EnableTotalRecordCount = request.EnableTotalRecordCount, - ExcludeItemIds = request.GetExcludeItemIds(), - DtoOptions = dtoOptions + ExcludeItemIds = GetGuids(request.ExcludeItemIds), + DtoOptions = dtoOptions, + SearchTerm = request.SearchTerm }; - if (!string.IsNullOrWhiteSpace(request.Ids)) + if (!string.IsNullOrWhiteSpace(request.Ids) || !string.IsNullOrWhiteSpace(request.SearchTerm)) { query.CollapseBoxSetItems = false; } @@ -416,18 +429,18 @@ namespace MediaBrowser.Api.UserLibrary { return null; } - }).Where(i => i != null).Select(i => i.Id.ToString("N")).ToArray(); + }).Where(i => i != null).Select(i => i.Id).ToArray(); } // ExcludeArtistIds if (!string.IsNullOrWhiteSpace(request.ExcludeArtistIds)) { - query.ExcludeArtistIds = request.ExcludeArtistIds.Split('|'); + query.ExcludeArtistIds = GetGuids(request.ExcludeArtistIds); } if (!string.IsNullOrWhiteSpace(request.AlbumIds)) { - query.AlbumIds = request.AlbumIds.Split('|'); + query.AlbumIds = GetGuids(request.AlbumIds); } // Albums @@ -441,7 +454,7 @@ namespace MediaBrowser.Api.UserLibrary Name = i, Limit = 1 - }).Select(albumId => albumId.ToString("N")); + }).Select(albumId => albumId); }).ToArray(); } @@ -459,7 +472,7 @@ namespace MediaBrowser.Api.UserLibrary { return null; } - }).Where(i => i != null).Select(i => i.Id.ToString("N")).ToArray(); + }).Where(i => i != null).Select(i => i.Id).ToArray(); } // Apply default sorting if none requested @@ -468,10 +481,10 @@ namespace MediaBrowser.Api.UserLibrary // Albums by artist if (query.ArtistIds.Length > 0 && query.IncludeItemTypes.Length == 1 && string.Equals(query.IncludeItemTypes[0], "MusicAlbum", StringComparison.OrdinalIgnoreCase)) { - query.OrderBy = new Tuple<string, SortOrder>[] + query.OrderBy = new [] { - new Tuple<string, SortOrder>(ItemSortBy.ProductionYear, SortOrder.Descending), - new Tuple<string, SortOrder>(ItemSortBy.SortName, SortOrder.Ascending) + new ValueTuple<string, SortOrder>(ItemSortBy.ProductionYear, SortOrder.Descending), + new ValueTuple<string, SortOrder>(ItemSortBy.SortName, SortOrder.Ascending) }; } } diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index 36dc773d4..d4f1b3fa8 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -32,7 +32,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } [Authenticated] @@ -47,7 +47,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -61,7 +61,7 @@ namespace MediaBrowser.Api.UserLibrary var item = GetMusicGenre(request.Name, LibraryManager, dtoOptions); - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -80,7 +80,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResultSlim(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query) diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 9417447d8..d2c9ef33a 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -7,6 +7,8 @@ using MediaBrowser.Model.Dto; using System.Collections.Generic; using System.Linq; using MediaBrowser.Model.Services; +using System; +using MediaBrowser.Model.Querying; namespace MediaBrowser.Api.UserLibrary { @@ -36,7 +38,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -54,7 +56,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -67,8 +69,8 @@ namespace MediaBrowser.Api.UserLibrary var dtoOptions = GetDtoOptions(AuthorizationContext, request); var item = GetPerson(request.Name, LibraryManager, dtoOptions); - - if (!string.IsNullOrWhiteSpace(request.UserId)) + + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -85,9 +87,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetPersons request) { - var result = GetResult(request); - - return ToOptimizedSerializedResultUsingCache(result); + return GetResultSlim(request); } /// <summary> @@ -98,48 +98,22 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>IEnumerable{Tuple{System.StringFunc{System.Int32}}}.</returns> protected override IEnumerable<BaseItem> GetAllItems(GetItemsByName request, IList<BaseItem> items) { - var inputPersonTypes = ((GetPersons)request).PersonTypes; - var personTypes = string.IsNullOrEmpty(inputPersonTypes) ? new string[] { } : inputPersonTypes.Split(','); - - // Either get all people, or all people filtered by a specific person type - var allPeople = GetAllPeople(items, personTypes); - - return allPeople - .Select(i => i.Name) - .DistinctNames() - - .Select(name => - { - try - { - return LibraryManager.GetPerson(name); - } - catch - { - return null; - // Already logged at lower levels - } - } - - ).Where(i => i != null); + throw new NotImplementedException(); } - /// <summary> - /// Gets all people. - /// </summary> - /// <param name="itemsList">The items list.</param> - /// <param name="personTypes">The person types.</param> - /// <returns>IEnumerable{PersonInfo}.</returns> - private IEnumerable<PersonInfo> GetAllPeople(IList<BaseItem> itemsList, string[] personTypes) + protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query) { - var allIds = itemsList.Select(i => i.Id).ToArray(); - - var allPeople = LibraryManager.GetPeople(new InternalPeopleQuery + var items = LibraryManager.GetPeopleItems(new InternalPeopleQuery { - PersonTypes = personTypes + PersonTypes = query.PersonTypes, + NameContains = query.NameContains ?? query.SearchTerm }); - return allPeople.Where(i => allIds.Contains(i.ItemId)).OrderBy(p => p.SortOrder ?? int.MaxValue).ThenBy(p => p.Type); + return new QueryResult<Tuple<BaseItem, ItemCounts>> + { + TotalRecordCount = items.Count, + Items = items.Take(query.Limit ?? int.MaxValue).Select(i => new Tuple<BaseItem, ItemCounts>(i, new ItemCounts())).ToArray() + }; } public PersonsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext) diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index f10cccbb1..4a3204f71 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -38,7 +38,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -56,7 +56,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -70,7 +70,7 @@ namespace MediaBrowser.Api.UserLibrary var item = GetStudio(request.Name, LibraryManager, dtoOptions); - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResultSlim(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } protected override QueryResult<Tuple<BaseItem, ItemCounts>> GetItems(GetItemsByName request, InternalItemsQuery query) @@ -105,10 +105,7 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>IEnumerable{Tuple{System.StringFunc{System.Int32}}}.</returns> protected override IEnumerable<BaseItem> GetAllItems(GetItemsByName request, IList<BaseItem> items) { - return items - .SelectMany(i => i.Studios) - .DistinctNames() - .Select(name => LibraryManager.GetStudio(name)); + throw new NotImplementedException(); } public StudiosService(IUserManager userManager, ILibraryManager libraryManager, IUserDataManager userDataRepository, IItemRepository itemRepository, IDtoService dtoService, IAuthorizationContext authorizationContext) : base(userManager, libraryManager, userDataRepository, itemRepository, dtoService, authorizationContext) diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 1bbc740c0..30df0ad23 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -29,7 +29,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 string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. @@ -50,7 +50,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 string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -64,7 +64,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 string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the item id. @@ -85,14 +85,14 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] - public string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. /// </summary> /// <value>The id.</value> [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] - public string Id { get; set; } + public Guid Id { get; set; } } /// <summary> @@ -106,14 +106,14 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] - public string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. /// </summary> /// <value>The id.</value> [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] - public string Id { get; set; } + public Guid Id { get; set; } } /// <summary> @@ -127,14 +127,14 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] - public string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. /// </summary> /// <value>The id.</value> [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] - public string Id { get; set; } + public Guid Id { get; set; } } /// <summary> @@ -148,14 +148,14 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] - public string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. /// </summary> /// <value>The id.</value> [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] - public string Id { get; set; } + public Guid Id { get; set; } /// <summary> /// Gets or sets a value indicating whether this <see cref="UpdateUserItemRating" /> is likes. @@ -176,7 +176,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 string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. @@ -197,7 +197,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 string UserId { get; set; } + public Guid UserId { get; set; } /// <summary> /// Gets or sets the id. @@ -215,13 +215,13 @@ 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 string UserId { get; set; } + public Guid UserId { get; set; } [ApiMember(Name = "Limit", Description = "Limit", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int Limit { get; set; } [ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string ParentId { get; set; } + public Guid ParentId { get; set; } [ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: Chapters, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, SortName, Studios, Taglines", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)] public string Fields { get; set; } @@ -291,7 +291,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetAsync(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } public object Get(GetLatestMedia request) @@ -344,43 +344,15 @@ namespace MediaBrowser.Api.UserLibrary var user = _userManager.GetUserById(request.UserId); var item = string.IsNullOrEmpty(request.Id) ? - user.RootFolder : + _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(request.Id); - var series = item as Series; - - // Get them from the child tree - if (series != null) - { - var dtoOptions = GetDtoOptions(_authContext, request); - - // Avoid implicitly captured closure - var currentUser = user; - - var dtos = series - .GetEpisodes(user, dtoOptions) - .Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0) - .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, currentUser)); - - return dtos.ToArray(); - } - - var movie = item as IHasSpecialFeatures; - - // Get them from the db - if (movie != null) - { - var dtoOptions = GetDtoOptions(_authContext, request); - - var dtos = movie.SpecialFeatureIds - .Select(_libraryManager.GetItemById) - .OrderBy(i => i.SortName) - .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); + var dtoOptions = GetDtoOptions(_authContext, request); - return dtos.ToArray(); - } + var dtos = item.GetDisplayExtras() + .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)); - return new BaseItemDto[] { }; + return dtos.ToArray(); } /// <summary> @@ -392,28 +364,15 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _libraryManager.GetItemById(request.Id); - - List<Guid> trailerIds = null; - - var hasTrailers = item as IHasTrailers; - if (hasTrailers != null) - { - trailerIds = hasTrailers.GetTrailerIds(); - } - else - { - trailerIds = new List<Guid>(); - } + var item = string.IsNullOrEmpty(request.Id) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(request.Id); var dtoOptions = GetDtoOptions(_authContext, request); - var dtos = trailerIds - .Select(_libraryManager.GetItemById) + var dtos = item.GetExtras(new[] { ExtraType.Trailer }) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item)) .ToArray(); - return ToOptimizedSerializedResultUsingCache(dtos); + return ToOptimizedResult(dtos); } /// <summary> @@ -425,7 +384,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _libraryManager.GetItemById(request.Id); + var item = string.IsNullOrEmpty(request.Id) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(request.Id); await RefreshItemOnDemandIfNeeded(item).ConfigureAwait(false); @@ -433,7 +392,7 @@ namespace MediaBrowser.Api.UserLibrary var result = _dtoService.GetBaseItemDto(item, dtoOptions, user); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } private async Task RefreshItemOnDemandIfNeeded(BaseItem item) @@ -448,7 +407,7 @@ namespace MediaBrowser.Api.UserLibrary var options = new MetadataRefreshOptions(_fileSystem) { MetadataRefreshMode = MetadataRefreshMode.FullRefresh, - ImageRefreshMode = ImageRefreshMode.FullRefresh, + ImageRefreshMode = MetadataRefreshMode.FullRefresh, ForceSave = performFullRefresh }; @@ -466,13 +425,13 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = user.RootFolder; + var item = _libraryManager.GetUserRootFolder(); var dtoOptions = GetDtoOptions(_authContext, request); var result = _dtoService.GetBaseItemDto(item, dtoOptions, user); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -484,7 +443,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _libraryManager.GetItemById(request.Id); + var item = string.IsNullOrEmpty(request.Id) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(request.Id); var items = await _libraryManager.GetIntros(item, user).ConfigureAwait(false); @@ -498,7 +457,7 @@ namespace MediaBrowser.Api.UserLibrary TotalRecordCount = dtos.Length }; - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -507,7 +466,7 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="request">The request.</param> public object Post(MarkFavoriteItem request) { - var dto = MarkFavorite(request.UserId, request.Id, true); + var dto = MarkFavorite(request.UserId, request.Id, true); return ToOptimizedResult(dto); } @@ -529,11 +488,11 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="userId">The user id.</param> /// <param name="itemId">The item id.</param> /// <param name="isFavorite">if set to <c>true</c> [is favorite].</param> - private UserItemDataDto MarkFavorite(string userId, string itemId, bool isFavorite) + private UserItemDataDto MarkFavorite(Guid userId, Guid itemId, bool isFavorite) { var user = _userManager.GetUserById(userId); - var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : _libraryManager.GetItemById(itemId); + var item = itemId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(itemId); // Get the user data for this item var data = _userDataRepository.GetUserData(user, item); @@ -541,7 +500,7 @@ namespace MediaBrowser.Api.UserLibrary // Set favorite status data.IsFavorite = isFavorite; - _userDataRepository.SaveUserData(user.Id, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None); + _userDataRepository.SaveUserData(user, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None); return _userDataRepository.GetUserDataDto(item, user); } @@ -563,7 +522,7 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="request">The request.</param> public object Post(UpdateUserItemRating request) { - var dto = UpdateUserItemRating(request.UserId, request.Id, request.Likes); + var dto = UpdateUserItemRating(request.UserId, request.Id, request.Likes); return ToOptimizedResult(dto); } @@ -574,18 +533,18 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="userId">The user id.</param> /// <param name="itemId">The item id.</param> /// <param name="likes">if set to <c>true</c> [likes].</param> - private UserItemDataDto UpdateUserItemRating(string userId, string itemId, bool? likes) + private UserItemDataDto UpdateUserItemRating(Guid userId, Guid itemId, bool? likes) { var user = _userManager.GetUserById(userId); - var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : _libraryManager.GetItemById(itemId); + var item = itemId.Equals(Guid.Empty) ? _libraryManager.GetUserRootFolder() : _libraryManager.GetItemById(itemId); // Get the user data for this item var data = _userDataRepository.GetUserData(user, item); data.Likes = likes; - _userDataRepository.SaveUserData(user.Id, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None); + _userDataRepository.SaveUserData(user, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None); return _userDataRepository.GetUserDataDto(item, user); } diff --git a/MediaBrowser.Api/UserLibrary/UserViewsService.cs b/MediaBrowser.Api/UserLibrary/UserViewsService.cs index 096157e47..5e9270e0b 100644 --- a/MediaBrowser.Api/UserLibrary/UserViewsService.cs +++ b/MediaBrowser.Api/UserLibrary/UserViewsService.cs @@ -24,10 +24,11 @@ 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 string UserId { get; set; } + public Guid UserId { get; set; } - [ApiMember(Name = "IncludeExternalContent", Description = "Whether or not to include external views such as channels or live tv", IsRequired = true, DataType = "boolean", ParameterType = "query", Verb = "POST")] + [ApiMember(Name = "IncludeExternalContent", Description = "Whether or not to include external views such as channels or live tv", IsRequired = true, DataType = "boolean", ParameterType = "query", Verb = "GET")] public bool? IncludeExternalContent { get; set; } + public bool IncludeHidden { get; set; } public string PresetViews { get; set; } } @@ -40,7 +41,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 string UserId { get; set; } + public Guid UserId { get; set; } } public class UserViewsService : BaseApiService @@ -49,16 +50,18 @@ namespace MediaBrowser.Api.UserLibrary private readonly IUserViewManager _userViewManager; private readonly IDtoService _dtoService; private readonly IAuthorizationContext _authContext; + private readonly ILibraryManager _libraryManager; - public UserViewsService(IUserManager userManager, IUserViewManager userViewManager, IDtoService dtoService, IAuthorizationContext authContext) + public UserViewsService(IUserManager userManager, IUserViewManager userViewManager, IDtoService dtoService, IAuthorizationContext authContext, ILibraryManager libraryManager) { _userManager = userManager; _userViewManager = userViewManager; _dtoService = dtoService; _authContext = authContext; + _libraryManager = libraryManager; } - public async Task<object> Get(GetUserViews request) + public object Get(GetUserViews request) { var query = new UserViewQuery { @@ -69,6 +72,7 @@ namespace MediaBrowser.Api.UserLibrary { query.IncludeExternalContent = request.IncludeExternalContent.Value; } + query.IncludeHidden = request.IncludeHidden; if (!string.IsNullOrWhiteSpace(request.PresetViews)) { @@ -78,18 +82,16 @@ namespace MediaBrowser.Api.UserLibrary var app = _authContext.GetAuthorizationInfo(Request).Client ?? string.Empty; if (app.IndexOf("emby rt", StringComparison.OrdinalIgnoreCase) != -1) { - query.PresetViews = new[] { CollectionType.Music, CollectionType.Movies, CollectionType.TvShows }; + query.PresetViews = new[] { CollectionType.Movies, CollectionType.TvShows }; } - //query.PresetViews = new[] { CollectionType.Music, CollectionType.Movies, CollectionType.TvShows }; - var folders = await _userViewManager.GetUserViews(query, CancellationToken.None).ConfigureAwait(false); + var folders = _userViewManager.GetUserViews(query); var dtoOptions = GetDtoOptions(_authContext, request); var fields = dtoOptions.Fields.ToList(); fields.Add(ItemFields.PrimaryImageAspectRatio); fields.Add(ItemFields.DisplayPreferencesId); - fields.Remove(ItemFields.SyncInfo); fields.Remove(ItemFields.BasicSyncInfo); dtoOptions.Fields = fields.ToArray(fields.Count); @@ -111,7 +113,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var list = user.RootFolder + var list = _libraryManager.GetUserRootFolder() .GetChildren(user, true) .OfType<Folder>() .Where(UserView.IsEligibleForGrouping) diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index db622a9b3..30ac88e00 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -7,6 +7,7 @@ using MediaBrowser.Model.Dto; using System.Collections.Generic; using System.Linq; using MediaBrowser.Model.Services; +using System; namespace MediaBrowser.Api.UserLibrary { @@ -36,7 +37,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <value>The user id.</value> [ApiMember(Name = "UserId", Description = "Optional. Filter by user id, and attach user data", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string UserId { get; set; } + public Guid UserId { get; set; } } /// <summary> @@ -54,7 +55,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetItem(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> @@ -68,7 +69,7 @@ namespace MediaBrowser.Api.UserLibrary var dtoOptions = GetDtoOptions(AuthorizationContext, request); - if (!string.IsNullOrWhiteSpace(request.UserId)) + if (!request.UserId.Equals(Guid.Empty)) { var user = UserManager.GetUserById(request.UserId); @@ -87,7 +88,7 @@ namespace MediaBrowser.Api.UserLibrary { var result = GetResult(request); - return ToOptimizedSerializedResultUsingCache(result); + return ToOptimizedResult(result); } /// <summary> |
