using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; using ServiceStack; using System; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Api { /// /// Class UpdateDisplayPreferences /// [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST", Summary = "Updates a user's display preferences for an item")] public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid { /// /// Gets or sets the id. /// /// The id. [ApiMember(Name = "DisplayPreferencesId", Description = "DisplayPreferences Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] public string DisplayPreferencesId { get; set; } [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] public Guid UserId { get; set; } [ApiMember(Name = "Client", Description = "Client", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] public string Client { get; set; } } [Route("/DisplayPreferences/{Id}", "GET", Summary = "Gets a user's display preferences for an item")] public class GetDisplayPreferences : 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; } [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] public Guid UserId { get; set; } [ApiMember(Name = "Client", Description = "Client", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] public string Client { get; set; } } /// /// Class DisplayPreferencesService /// public class DisplayPreferencesService : BaseApiService { /// /// The _display preferences manager /// private readonly IDisplayPreferencesRepository _displayPreferencesManager; /// /// The _json serializer /// private readonly IJsonSerializer _jsonSerializer; /// /// Initializes a new instance of the class. /// /// The json serializer. /// The display preferences manager. public DisplayPreferencesService(IJsonSerializer jsonSerializer, IDisplayPreferencesRepository displayPreferencesManager) { _jsonSerializer = jsonSerializer; _displayPreferencesManager = displayPreferencesManager; } /// /// Gets the specified request. /// /// The request. public object Get(GetDisplayPreferences request) { var result = _displayPreferencesManager.GetDisplayPreferences(request.Id, request.UserId, request.Client); if (result == null) { result = new DisplayPreferences { Id = request.Id }; } return ToOptimizedSerializedResultUsingCache(result); } /// /// Posts the specified request. /// /// The request. public void Post(UpdateDisplayPreferences request) { // Serialize to json and then back so that the core doesn't see the request dto type var displayPreferences = _jsonSerializer.DeserializeFromString(_jsonSerializer.SerializeToString(request)); var task = _displayPreferencesManager.SaveDisplayPreferences(displayPreferences, request.UserId, request.Client, CancellationToken.None); Task.WaitAll(task); } } }