diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/GenresService.cs')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/GenresService.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs new file mode 100644 index 000000000..ea97fea3e --- /dev/null +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -0,0 +1,69 @@ +using MediaBrowser.Common.Net; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Entities; +using ServiceStack.ServiceHost; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Linq; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.UserLibrary +{ + /// <summary> + /// Class GetGenres + /// </summary> + [Route("/Users/{UserId}/Items/{Id}/Genres", "GET")] + [Route("/Users/{UserId}/Items/Root/Genres", "GET")] + public class GetGenres : GetItemsByName + { + } + + /// <summary> + /// Class GenresService + /// </summary> + [Export(typeof(IRestfulService))] + public class GenresService : BaseItemsByNameService<Genre> + { + /// <summary> + /// Gets the specified request. + /// </summary> + /// <param name="request">The request.</param> + /// <returns>System.Object.</returns> + public object Get(GetGenres request) + { + var result = GetResult(request).Result; + + return ToOptimizedResult(result); + } + + /// <summary> + /// Gets all items. + /// </summary> + /// <param name="request">The request.</param> + /// <param name="items">The items.</param> + /// <param name="user">The user.</param> + /// <returns>IEnumerable{Tuple{System.StringFunc{System.Int32}}}.</returns> + protected override IEnumerable<Tuple<string, Func<int>>> GetAllItems(GetItemsByName request, IEnumerable<BaseItem> items, User user) + { + var itemsList = items.Where(i => i.Genres != null).ToList(); + + return itemsList + .SelectMany(i => i.Genres) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(name => new Tuple<string, Func<int>>(name, () => itemsList.Count(i => i.Genres.Contains(name, StringComparer.OrdinalIgnoreCase)))); + } + + /// <summary> + /// Gets the entity. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>Task{Genre}.</returns> + protected override Task<Genre> GetEntity(string name) + { + var kernel = (Kernel)Kernel; + + return kernel.LibraryManager.GetGenre(name); + } + } +} |
