| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | using MediaBrowser.Common.Net;using MediaBrowser.Controller;using MediaBrowser.Controller.Net;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Serialization;using ServiceStack;using System.Collections.Generic;using System.Globalization;using System.Net;using System.Threading;using System.Threading.Tasks;namespace MediaBrowser.Api{    /// <summary>    /// Class InstallPackage    /// </summary>    [Route("/Packages/Reviews/{Id}", "POST", Summary = "Creates or updates a package review")]    public class CreateReviewRequest : IReturnVoid    {        /// <summary>        /// Gets or sets the Id.        /// </summary>        /// <value>The Id.</value>        [ApiMember(Name = "Id", Description = "Package Id", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "POST")]        public int Id { get; set; }        /// <summary>        /// Gets or sets the rating.        /// </summary>        /// <value>The review.</value>        [ApiMember(Name = "Rating", Description = "The rating value (1-5)", IsRequired = true, DataType = "int", ParameterType = "query", Verb = "POST")]        public int Rating { get; set; }        /// <summary>        /// Gets or sets the recommend value.        /// </summary>        /// <value>Whether or not this review recommends this item.</value>        [ApiMember(Name = "Recommend", Description = "Whether or not this review recommends this item", IsRequired = true, DataType = "bool", ParameterType = "query", Verb = "POST")]        public bool Recommend { get; set; }        /// <summary>        /// Gets or sets the title.        /// </summary>        /// <value>The title.</value>        [ApiMember(Name = "Title", Description = "Optional short description of review.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]        public string Title { get; set; }        /// <summary>        /// Gets or sets the full review.        /// </summary>        /// <value>The full review.</value>        [ApiMember(Name = "Review", Description = "Optional full review.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]        public string Review { get; set; }    }    /// <summary>    /// Class InstallPackage    /// </summary>    [Route("/Packages/{Id}/Reviews", "GET", Summary = "Gets reviews for a package")]    public class ReviewRequest : IReturn<List<PackageReviewInfo>>    {        /// <summary>        /// Gets or sets the Id.        /// </summary>        /// <value>The Id.</value>        [ApiMember(Name = "Id", Description = "Package Id", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")]        public int Id { get; set; }        /// <summary>        /// Gets or sets the max rating.        /// </summary>        /// <value>The max rating.</value>        [ApiMember(Name = "MaxRating", Description = "Retrieve only reviews less than or equal to this", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]        public int MaxRating { get; set; }        /// <summary>        /// Gets or sets the min rating.        /// </summary>        /// <value>The max rating.</value>        [ApiMember(Name = "MinRating", Description = "Retrieve only reviews greator than or equal to this", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]        public int MinRating { get; set; }        /// <summary>        /// Only retrieve reviews with at least a short review.        /// </summary>        /// <value>True if should only get reviews with a title.</value>        [ApiMember(Name = "ForceTitle", Description = "Whether or not to restrict results to those with a title", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]        public bool ForceTitle { get; set; }        /// <summary>        /// Gets or sets the limit for the query.        /// </summary>        /// <value>The max rating.</value>        [ApiMember(Name = "Limit", Description = "Limit the result to this many reviews (ordered by latest)", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]        public int Limit { get; set; }    }    [Authenticated]    public class PackageReviewService : BaseApiService    {        private readonly IHttpClient _httpClient;        private readonly IJsonSerializer _serializer;        private const string MbAdminUrl = "https://www.mb3admin.com/admin/";        private readonly IServerApplicationHost _appHost;        public PackageReviewService(IHttpClient httpClient, IJsonSerializer serializer, IServerApplicationHost appHost)        {            _httpClient = httpClient;            _serializer = serializer;            _appHost = appHost;        }        public async Task<object> Get(ReviewRequest request)        {            var parms = "?id=" + request.Id;            if (request.MaxRating > 0)            {                parms += "&max=" + request.MaxRating;            }            if (request.MinRating > 0)            {                parms += "&min=" + request.MinRating;            }            if (request.MinRating > 0)            {                parms += "&limit=" + request.Limit;            }            if (request.ForceTitle)            {                parms += "&title=true";            }            using (var result = await _httpClient.Get(MbAdminUrl + "/service/packageReview/retrieve" + parms, CancellationToken.None)                            .ConfigureAwait(false))            {                var reviews = _serializer.DeserializeFromStream<List<PackageReviewInfo>>(result);                return ToOptimizedResult(reviews);            }        }        public void Post(CreateReviewRequest request)        {            var reviewText = WebUtility.HtmlEncode(request.Review ?? string.Empty);            var title = WebUtility.HtmlEncode(request.Title ?? string.Empty);            var review = new Dictionary<string, string>                             { { "id", request.Id.ToString(CultureInfo.InvariantCulture) },                               { "mac", _appHost.SystemId },                               { "rating", request.Rating.ToString(CultureInfo.InvariantCulture) },                               { "recommend", request.Recommend.ToString() },                               { "title", title },                               { "review", reviewText },                             };            Task.WaitAll(_httpClient.Post(MbAdminUrl + "/service/packageReview/update", review, CancellationToken.None));        }    }}
 |