MediaInfoService.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using MediaBrowser.Controller.Channels;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Library;
  4. using MediaBrowser.Controller.Net;
  5. using MediaBrowser.Model.Dto;
  6. using MediaBrowser.Model.MediaInfo;
  7. using ServiceStack;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. namespace MediaBrowser.Api.Playback
  13. {
  14. [Route("/Items/{Id}/MediaInfo", "GET", Summary = "Gets live playback media info for an item")]
  15. [Route("/Items/{Id}/PlaybackInfo", "GET", Summary = "Gets live playback media info for an item")]
  16. public class GetLiveMediaInfo : IReturn<LiveMediaInfoResult>
  17. {
  18. [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  19. public string Id { get; set; }
  20. [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  21. public string UserId { get; set; }
  22. }
  23. [Authenticated]
  24. public class MediaInfoService : BaseApiService
  25. {
  26. private readonly ILibraryManager _libraryManager;
  27. private readonly IChannelManager _channelManager;
  28. private readonly IUserManager _userManager;
  29. public MediaInfoService(ILibraryManager libraryManager, IChannelManager channelManager, IUserManager userManager)
  30. {
  31. _libraryManager = libraryManager;
  32. _channelManager = channelManager;
  33. _userManager = userManager;
  34. }
  35. public async Task<object> Get(GetLiveMediaInfo request)
  36. {
  37. var item = _libraryManager.GetItemById(request.Id);
  38. IEnumerable<MediaSourceInfo> mediaSources;
  39. var channelItem = item as IChannelMediaItem;
  40. var user = _userManager.GetUserById(request.UserId);
  41. if (channelItem != null)
  42. {
  43. mediaSources = await _channelManager.GetChannelItemMediaSources(request.Id, true, CancellationToken.None)
  44. .ConfigureAwait(false);
  45. }
  46. else
  47. {
  48. var hasMediaSources = (IHasMediaSources)item;
  49. if (user == null)
  50. {
  51. mediaSources = hasMediaSources.GetMediaSources(true);
  52. }
  53. else
  54. {
  55. mediaSources = hasMediaSources.GetMediaSources(true, user);
  56. }
  57. }
  58. return ToOptimizedResult(new LiveMediaInfoResult
  59. {
  60. MediaSources = mediaSources.ToList()
  61. });
  62. }
  63. }
  64. }