ContentDirectory.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.Threading.Tasks;
  4. using Emby.Dlna.Service;
  5. using MediaBrowser.Common.Net;
  6. using MediaBrowser.Controller.Configuration;
  7. using MediaBrowser.Controller.Dlna;
  8. using MediaBrowser.Controller.Drawing;
  9. using MediaBrowser.Controller.Entities;
  10. using MediaBrowser.Controller.Library;
  11. using MediaBrowser.Controller.MediaEncoding;
  12. using MediaBrowser.Controller.TV;
  13. using MediaBrowser.Model.Dlna;
  14. using MediaBrowser.Model.Globalization;
  15. using Microsoft.Extensions.Logging;
  16. namespace Emby.Dlna.ContentDirectory
  17. {
  18. public class ContentDirectory : BaseService, IContentDirectory
  19. {
  20. private readonly ILibraryManager _libraryManager;
  21. private readonly IImageProcessor _imageProcessor;
  22. private readonly IUserDataManager _userDataManager;
  23. private readonly IDlnaManager _dlna;
  24. private readonly IServerConfigurationManager _config;
  25. private readonly IUserManager _userManager;
  26. private readonly ILocalizationManager _localization;
  27. private readonly IMediaSourceManager _mediaSourceManager;
  28. private readonly IUserViewManager _userViewManager;
  29. private readonly IMediaEncoder _mediaEncoder;
  30. private readonly ITVSeriesManager _tvSeriesManager;
  31. public ContentDirectory(IDlnaManager dlna,
  32. IUserDataManager userDataManager,
  33. IImageProcessor imageProcessor,
  34. ILibraryManager libraryManager,
  35. IServerConfigurationManager config,
  36. IUserManager userManager,
  37. ILogger<ContentDirectory> logger,
  38. IHttpClient httpClient,
  39. ILocalizationManager localization,
  40. IMediaSourceManager mediaSourceManager,
  41. IUserViewManager userViewManager,
  42. IMediaEncoder mediaEncoder,
  43. ITVSeriesManager tvSeriesManager)
  44. : base(logger, httpClient)
  45. {
  46. _dlna = dlna;
  47. _userDataManager = userDataManager;
  48. _imageProcessor = imageProcessor;
  49. _libraryManager = libraryManager;
  50. _config = config;
  51. _userManager = userManager;
  52. _localization = localization;
  53. _mediaSourceManager = mediaSourceManager;
  54. _userViewManager = userViewManager;
  55. _mediaEncoder = mediaEncoder;
  56. _tvSeriesManager = tvSeriesManager;
  57. }
  58. private int SystemUpdateId
  59. {
  60. get
  61. {
  62. var now = DateTime.UtcNow;
  63. return now.Year + now.DayOfYear + now.Hour;
  64. }
  65. }
  66. /// <inheritdoc />
  67. public string GetServiceXml()
  68. {
  69. return new ContentDirectoryXmlBuilder().GetXml();
  70. }
  71. /// <inheritdoc />
  72. public Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request)
  73. {
  74. var profile = _dlna.GetProfile(request.Headers) ??
  75. _dlna.GetDefaultProfile();
  76. var serverAddress = request.RequestedUrl.Substring(0, request.RequestedUrl.IndexOf("/dlna", StringComparison.OrdinalIgnoreCase));
  77. var user = GetUser(profile);
  78. return new ControlHandler(
  79. Logger,
  80. _libraryManager,
  81. profile,
  82. serverAddress,
  83. null,
  84. _imageProcessor,
  85. _userDataManager,
  86. user,
  87. SystemUpdateId,
  88. _config,
  89. _localization,
  90. _mediaSourceManager,
  91. _userViewManager,
  92. _mediaEncoder,
  93. _tvSeriesManager)
  94. .ProcessControlRequestAsync(request);
  95. }
  96. private User GetUser(DeviceProfile profile)
  97. {
  98. if (!string.IsNullOrEmpty(profile.UserId))
  99. {
  100. var user = _userManager.GetUserById(Guid.Parse(profile.UserId));
  101. if (user != null)
  102. {
  103. return user;
  104. }
  105. }
  106. var userId = _config.GetDlnaConfiguration().DefaultUserId;
  107. if (!string.IsNullOrEmpty(userId))
  108. {
  109. var user = _userManager.GetUserById(Guid.Parse(userId));
  110. if (user != null)
  111. {
  112. return user;
  113. }
  114. }
  115. foreach (var user in _userManager.Users)
  116. {
  117. if (user.Policy.IsAdministrator)
  118. {
  119. return user;
  120. }
  121. }
  122. foreach (var user in _userManager.Users)
  123. {
  124. return user;
  125. }
  126. return null;
  127. }
  128. }
  129. }