using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; namespace MediaBrowser.Api.UserLibrary { /// /// Class GetYears /// [Route("/Users/{UserId}/Items/{Id}/Years", "GET")] [Route("/Users/{UserId}/Items/Root/Years", "GET")] public class GetYears : GetItemsByName { } /// /// Class YearsService /// public class YearsService : BaseItemsByNameService { /// /// The us culture /// private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetYears request) { var result = GetResult(request).Result; return ToOptimizedResult(result); } /// /// Gets all items. /// /// The request. /// The items. /// The user. /// IEnumerable{Tuple{System.StringFunc{System.Int32}}}. protected override IEnumerable>> GetAllItems(GetItemsByName request, IEnumerable items, User user) { var itemsList = items.Where(i => i.ProductionYear != null).ToList(); return itemsList .Select(i => i.ProductionYear.Value) .Distinct() .Select(year => new Tuple>(year.ToString(UsCulture), () => itemsList.Count(i => i.ProductionYear.HasValue && i.ProductionYear.Value == year))); } /// /// Gets the entity. /// /// The name. /// Task{Studio}. protected override Task GetEntity(string name) { var kernel = (Kernel)Kernel; return kernel.LibraryManager.GetYear(int.Parse(name, UsCulture)); } } }