using System.Threading; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; using System.Linq; 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 { } /// /// Class LibraryService /// public class LibraryService : BaseApiService { /// /// The _item repo /// private readonly IItemRepository _itemRepo; private readonly ILibraryManager _libraryManager; /// /// Initializes a new instance of the class. /// /// The item repo. /// The library manager. public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager) { _itemRepo = itemRepo; _libraryManager = libraryManager; } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetCriticReviews request) { var result = GetCriticReviewsAsync(request).Result; return ToOptimizedResult(result); } /// /// Posts the specified request. /// /// The request. public void Post(RefreshLibrary request) { _libraryManager.ValidateMediaLibrary(new Progress(), CancellationToken.None); } /// /// Gets the critic reviews async. /// /// The request. /// Task{ItemReviewsResult}. private async Task GetCriticReviewsAsync(GetCriticReviews request) { var reviews = await _itemRepo.GetCriticReviews(new Guid(request.Id)).ConfigureAwait(false); var reviewsArray = reviews.ToArray(); var result = new ItemReviewsResult { TotalRecordCount = reviewsArray.Length }; if (request.StartIndex.HasValue) { reviewsArray = reviewsArray.Skip(request.StartIndex.Value).ToArray(); } if (request.Limit.HasValue) { reviewsArray = reviewsArray.Take(request.Limit.Value).ToArray(); } result.ItemReviews = reviewsArray; return result; } } }