aboutsummaryrefslogtreecommitdiff
path: root/Emby.Dlna/ContentDirectory/ContentDirectoryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Dlna/ContentDirectory/ContentDirectoryService.cs')
-rw-r--r--Emby.Dlna/ContentDirectory/ContentDirectoryService.cs145
1 files changed, 145 insertions, 0 deletions
diff --git a/Emby.Dlna/ContentDirectory/ContentDirectoryService.cs b/Emby.Dlna/ContentDirectory/ContentDirectoryService.cs
new file mode 100644
index 000000000..72732823a
--- /dev/null
+++ b/Emby.Dlna/ContentDirectory/ContentDirectoryService.cs
@@ -0,0 +1,145 @@
+#pragma warning disable CS1591
+
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Emby.Dlna.Service;
+using Jellyfin.Data.Entities;
+using Jellyfin.Data.Enums;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dlna;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.MediaEncoding;
+using MediaBrowser.Controller.TV;
+using MediaBrowser.Model.Dlna;
+using MediaBrowser.Model.Globalization;
+using Microsoft.Extensions.Logging;
+
+namespace Emby.Dlna.ContentDirectory
+{
+ public class ContentDirectoryService : BaseService, IContentDirectory
+ {
+ private readonly ILibraryManager _libraryManager;
+ private readonly IImageProcessor _imageProcessor;
+ private readonly IUserDataManager _userDataManager;
+ private readonly IDlnaManager _dlna;
+ private readonly IServerConfigurationManager _config;
+ private readonly IUserManager _userManager;
+ private readonly ILocalizationManager _localization;
+ private readonly IMediaSourceManager _mediaSourceManager;
+ private readonly IUserViewManager _userViewManager;
+ private readonly IMediaEncoder _mediaEncoder;
+ private readonly ITVSeriesManager _tvSeriesManager;
+
+ public ContentDirectoryService(
+ IDlnaManager dlna,
+ IUserDataManager userDataManager,
+ IImageProcessor imageProcessor,
+ ILibraryManager libraryManager,
+ IServerConfigurationManager config,
+ IUserManager userManager,
+ ILogger<ContentDirectoryService> logger,
+ IHttpClient httpClient,
+ ILocalizationManager localization,
+ IMediaSourceManager mediaSourceManager,
+ IUserViewManager userViewManager,
+ IMediaEncoder mediaEncoder,
+ ITVSeriesManager tvSeriesManager)
+ : base(logger, httpClient)
+ {
+ _dlna = dlna;
+ _userDataManager = userDataManager;
+ _imageProcessor = imageProcessor;
+ _libraryManager = libraryManager;
+ _config = config;
+ _userManager = userManager;
+ _localization = localization;
+ _mediaSourceManager = mediaSourceManager;
+ _userViewManager = userViewManager;
+ _mediaEncoder = mediaEncoder;
+ _tvSeriesManager = tvSeriesManager;
+ }
+
+ private int SystemUpdateId
+ {
+ get
+ {
+ var now = DateTime.UtcNow;
+
+ return now.Year + now.DayOfYear + now.Hour;
+ }
+ }
+
+ /// <inheritdoc />
+ public string GetServiceXml()
+ {
+ return new ContentDirectoryXmlBuilder().GetXml();
+ }
+
+ /// <inheritdoc />
+ public Task<ControlResponse> ProcessControlRequestAsync(ControlRequest request)
+ {
+ var profile = _dlna.GetProfile(request.Headers) ??
+ _dlna.GetDefaultProfile();
+
+ var serverAddress = request.RequestedUrl.Substring(0, request.RequestedUrl.IndexOf("/dlna", StringComparison.OrdinalIgnoreCase));
+
+ var user = GetUser(profile);
+
+ return new ControlHandler(
+ Logger,
+ _libraryManager,
+ profile,
+ serverAddress,
+ null,
+ _imageProcessor,
+ _userDataManager,
+ user,
+ SystemUpdateId,
+ _config,
+ _localization,
+ _mediaSourceManager,
+ _userViewManager,
+ _mediaEncoder,
+ _tvSeriesManager)
+ .ProcessControlRequestAsync(request);
+ }
+
+ private User GetUser(DeviceProfile profile)
+ {
+ if (!string.IsNullOrEmpty(profile.UserId))
+ {
+ var user = _userManager.GetUserById(Guid.Parse(profile.UserId));
+
+ if (user != null)
+ {
+ return user;
+ }
+ }
+
+ var userId = _config.GetDlnaConfiguration().DefaultUserId;
+
+ if (!string.IsNullOrEmpty(userId))
+ {
+ var user = _userManager.GetUserById(Guid.Parse(userId));
+
+ if (user != null)
+ {
+ return user;
+ }
+ }
+
+ foreach (var user in _userManager.Users)
+ {
+ if (user.HasPermission(PermissionKind.IsAdministrator))
+ {
+ return user;
+ }
+ }
+
+ return _userManager.Users.FirstOrDefault();
+ }
+ }
+}