DeviceService.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using MediaBrowser.Controller.Devices;
  2. using MediaBrowser.Controller.Net;
  3. using MediaBrowser.Model.Devices;
  4. using ServiceStack;
  5. using ServiceStack.Web;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. namespace MediaBrowser.Api.Devices
  11. {
  12. [Route("/Devices", "GET", Summary = "Gets all devices")]
  13. public class GetDevices : IReturn<List<DeviceInfo>>
  14. {
  15. [ApiMember(Name = "SupportsContentUploading", Description = "SupportsContentUploading", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
  16. public bool? SupportsContentUploading { get; set; }
  17. }
  18. [Route("/Devices", "DELETE", Summary = "Deletes a device")]
  19. public class DeleteDevice
  20. {
  21. [ApiMember(Name = "Id", Description = "Device Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")]
  22. public string Id { get; set; }
  23. }
  24. [Route("/Devices/CameraUploads", "GET", Summary = "Gets camera upload history for a device")]
  25. public class GetCameraUploads : IReturn<ContentUploadHistory>
  26. {
  27. [ApiMember(Name = "Id", Description = "Device Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  28. public string DeviceId { get; set; }
  29. }
  30. [Route("/Devices/CameraUploads", "POST", Summary = "Uploads content")]
  31. public class PostCameraUpload : IRequiresRequestStream, IReturnVoid
  32. {
  33. [ApiMember(Name = "DeviceId", Description = "Device Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  34. public string DeviceId { get; set; }
  35. [ApiMember(Name = "Album", Description = "Album", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  36. public string Album { get; set; }
  37. [ApiMember(Name = "Name", Description = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  38. public string Name { get; set; }
  39. [ApiMember(Name = "FullPath", Description = "FullPath", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  40. public string FullPath { get; set; }
  41. public Stream RequestStream { get; set; }
  42. }
  43. [Authenticated]
  44. public class DeviceService : BaseApiService
  45. {
  46. private readonly IDeviceManager _deviceManager;
  47. public DeviceService(IDeviceManager deviceManager)
  48. {
  49. _deviceManager = deviceManager;
  50. }
  51. public object Get(GetDevices request)
  52. {
  53. var devices = _deviceManager.GetDevices();
  54. if (request.SupportsContentUploading.HasValue)
  55. {
  56. var val = request.SupportsContentUploading.Value;
  57. devices = devices.Where(i => i.Capabilities.SupportsContentUploading == val);
  58. }
  59. return ToOptimizedResult(devices.ToList());
  60. }
  61. public object Get(GetCameraUploads request)
  62. {
  63. return ToOptimizedResult(_deviceManager.GetCameraUploadHistory(request.DeviceId));
  64. }
  65. public void Delete(DeleteDevice request)
  66. {
  67. var task = _deviceManager.DeleteDevice(request.Id);
  68. Task.WaitAll(task);
  69. }
  70. public void Post(PostCameraUpload request)
  71. {
  72. var deviceId = Request.QueryString["DeviceId"];
  73. var album = Request.QueryString["Album"];
  74. var fullPath = Request.QueryString["FullPath"];
  75. var name = Request.QueryString["Name"];
  76. var task = _deviceManager.AcceptCameraUpload(deviceId, request.RequestStream, new LocalFileInfo
  77. {
  78. MimeType = Request.ContentType,
  79. Album = album,
  80. Name = name,
  81. FullPath = fullPath
  82. });
  83. Task.WaitAll(task);
  84. }
  85. }
  86. }