DisplayPreferencesService.cs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using MediaBrowser.Controller.Library;
  2. using MediaBrowser.Model.Entities;
  3. using MediaBrowser.Model.Serialization;
  4. using ServiceStack.ServiceHost;
  5. using ServiceStack.Text.Controller;
  6. using System;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace MediaBrowser.Api
  10. {
  11. /// <summary>
  12. /// Class UpdateDisplayPreferences
  13. /// </summary>
  14. [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST")]
  15. [Api(("Updates a user's display preferences for an item"))]
  16. public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
  17. {
  18. /// <summary>
  19. /// Gets or sets the id.
  20. /// </summary>
  21. /// <value>The id.</value>
  22. [ApiMember(Name = "DisplayPreferencesId", Description = "DisplayPreferences Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
  23. public Guid DisplayPreferencesId { get; set; }
  24. }
  25. [Route("/DisplayPreferences/{Id}", "GET")]
  26. [Api(("Gets a user's display preferences for an item"))]
  27. public class GetDisplayPreferences : IReturn<DisplayPreferences>
  28. {
  29. /// <summary>
  30. /// Gets or sets the id.
  31. /// </summary>
  32. /// <value>The id.</value>
  33. [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  34. public Guid Id { get; set; }
  35. }
  36. /// <summary>
  37. /// Class DisplayPreferencesService
  38. /// </summary>
  39. public class DisplayPreferencesService : BaseApiService
  40. {
  41. /// <summary>
  42. /// The _display preferences manager
  43. /// </summary>
  44. private readonly IDisplayPreferencesManager _displayPreferencesManager;
  45. /// <summary>
  46. /// The _json serializer
  47. /// </summary>
  48. private readonly IJsonSerializer _jsonSerializer;
  49. /// <summary>
  50. /// Initializes a new instance of the <see cref="DisplayPreferencesService" /> class.
  51. /// </summary>
  52. /// <param name="jsonSerializer">The json serializer.</param>
  53. /// <param name="displayPreferencesManager">The display preferences manager.</param>
  54. public DisplayPreferencesService(IJsonSerializer jsonSerializer, IDisplayPreferencesManager displayPreferencesManager)
  55. {
  56. _jsonSerializer = jsonSerializer;
  57. _displayPreferencesManager = displayPreferencesManager;
  58. }
  59. /// <summary>
  60. /// Gets the specified request.
  61. /// </summary>
  62. /// <param name="request">The request.</param>
  63. public object Get(GetDisplayPreferences request)
  64. {
  65. var task = _displayPreferencesManager.GetDisplayPreferences(request.Id);
  66. return ToOptimizedResult(task.Result);
  67. }
  68. /// <summary>
  69. /// Posts the specified request.
  70. /// </summary>
  71. /// <param name="request">The request.</param>
  72. public void Post(UpdateDisplayPreferences request)
  73. {
  74. // We need to parse this manually because we told service stack not to with IRequiresRequestStream
  75. // https://code.google.com/p/servicestack/source/browse/trunk/Common/ServiceStack.Text/ServiceStack.Text/Controller/PathInfo.cs
  76. var pathInfo = PathInfo.Parse(RequestContext.PathInfo);
  77. var displayPreferencesId = new Guid(pathInfo.GetArgumentValue<string>(1));
  78. // Serialize to json and then back so that the core doesn't see the request dto type
  79. var displayPreferences = _jsonSerializer.DeserializeFromString<DisplayPreferences>(_jsonSerializer.SerializeToString(request));
  80. var task = _displayPreferencesManager.SaveDisplayPreferences(displayPreferences, CancellationToken.None);
  81. Task.WaitAll(task);
  82. }
  83. }
  84. }