using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Api { /// /// Class GetCriticReviews /// [Route("/Items/{Id}/CriticReviews", "GET")] [Api(Description = "Gets critic reviews for an item")] public class GetCriticReviews : IReturn { /// /// Gets or sets the id. /// /// The id. [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Id { get; set; } /// /// Skips over a given number of items within the results. Use for paging. /// /// The start index. [ApiMember(Name = "StartIndex", Description = "Optional. The record index to start at. All items with a lower index will be dropped from the results.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int? StartIndex { get; set; } /// /// The maximum number of items to return /// /// The limit. [ApiMember(Name = "Limit", Description = "Optional. The maximum number of records to return", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public int? Limit { get; set; } } [Route("/Library/Refresh", "POST")] [Api(Description = "Starts a library scan")] public class RefreshLibrary : IReturnVoid { } [Route("/Items/Counts", "GET")] [Api(Description = "Gets counts of various item types")] public class GetItemCounts : IReturn { [ApiMember(Name = "UserId", Description = "Optional. Get counts from a specific user's library.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public Guid? UserId { get; set; } } /// /// Class LibraryService /// public class LibraryService : BaseApiService { /// /// The _item repo /// private readonly IItemRepository _itemRepo; private readonly ILibraryManager _libraryManager; private readonly IUserManager _userManager; /// /// Initializes a new instance of the class. /// /// The item repo. /// The library manager. /// The user manager. public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager) { _itemRepo = itemRepo; _libraryManager = libraryManager; _userManager = userManager; } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetCriticReviews request) { var result = GetCriticReviewsAsync(request).Result; return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetItemCounts request) { var items = GetItems(request.UserId).ToList(); var counts = new ItemCounts { AlbumCount = items.OfType().Count(), EpisodeCount = items.OfType().Count(), GameCount = items.OfType().Count(), MovieCount = items.OfType().Count(), SeriesCount = items.OfType().Count(), SongCount = items.OfType