MediaInfoService.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using MediaBrowser.Controller.Library;
  2. using MediaBrowser.Controller.Net;
  3. using MediaBrowser.Model.Dlna;
  4. using MediaBrowser.Model.Dto;
  5. using MediaBrowser.Model.MediaInfo;
  6. using ServiceStack;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Api.Playback
  12. {
  13. [Route("/Items/{Id}/MediaInfo", "GET", Summary = "Gets live playback media info for an item")]
  14. public class GetLiveMediaInfo : IReturn<LiveMediaInfoResult>
  15. {
  16. [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  17. public string Id { get; set; }
  18. [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  19. public string UserId { get; set; }
  20. }
  21. [Route("/Items/{Id}/PlaybackInfo", "GET", Summary = "Gets live playback media info for an item")]
  22. public class GetPlaybackInfo : IReturn<LiveMediaInfoResult>
  23. {
  24. [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  25. public string Id { get; set; }
  26. [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  27. public string UserId { get; set; }
  28. }
  29. [Authenticated]
  30. public class MediaInfoService : BaseApiService
  31. {
  32. private readonly IMediaSourceManager _mediaSourceManager;
  33. public MediaInfoService(IMediaSourceManager mediaSourceManager)
  34. {
  35. _mediaSourceManager = mediaSourceManager;
  36. }
  37. public Task<object> Get(GetPlaybackInfo request)
  38. {
  39. return GetPlaybackInfo(request.Id, request.UserId);
  40. }
  41. public Task<object> Get(GetLiveMediaInfo request)
  42. {
  43. return GetPlaybackInfo(request.Id, request.UserId);
  44. }
  45. private async Task<object> GetPlaybackInfo(string id, string userId)
  46. {
  47. IEnumerable<MediaSourceInfo> mediaSources;
  48. var result = new LiveMediaInfoResult();
  49. try
  50. {
  51. mediaSources = await _mediaSourceManager.GetPlayackMediaSources(id, userId, true, CancellationToken.None).ConfigureAwait(false);
  52. }
  53. catch (PlaybackException ex)
  54. {
  55. mediaSources = new List<MediaSourceInfo>();
  56. result.ErrorCode = ex.ErrorCode;
  57. }
  58. result.MediaSources = mediaSources.ToList();
  59. return ToOptimizedResult(result);
  60. }
  61. }
  62. }