diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/StudiosService.cs')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/StudiosService.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs new file mode 100644 index 000000000..da9106367 --- /dev/null +++ b/MediaBrowser.Api/UserLibrary/StudiosService.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 GetStudios + /// </summary> + [Route("/Users/{UserId}/Items/{Id}/Studios", "GET")] + [Route("/Users/{UserId}/Items/Root/Studios", "GET")] + public class GetStudios : GetItemsByName + { + } + + /// <summary> + /// Class StudiosService + /// </summary> + [Export(typeof(IRestfulService))] + public class StudiosService : BaseItemsByNameService<Studio> + { + /// <summary> + /// Gets the specified request. + /// </summary> + /// <param name="request">The request.</param> + /// <returns>System.Object.</returns> + public object Get(GetStudios 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.Studios != null).ToList(); + + return itemsList + .SelectMany(i => i.Studios) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(name => new Tuple<string, Func<int>>(name, () => itemsList.Count(i => i.Studios.Contains(name, StringComparer.OrdinalIgnoreCase)))); + } + + /// <summary> + /// Gets the entity. + /// </summary> + /// <param name="name">The name.</param> + /// <returns>Task{Studio}.</returns> + protected override Task<Studio> GetEntity(string name) + { + var kernel = (Kernel)Kernel; + + return kernel.LibraryManager.GetStudio(name); + } + } +} |
