diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-04 13:02:19 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-04 13:02:19 -0400 |
| commit | dfe91e43b676915b840f0958e331ba2cb57966d4 (patch) | |
| tree | 4e1fe02b4b767f3a5b81eb4eefbf97581a8dc37c | |
| parent | 981973a028f51410b5fcc114d959bcad326aac52 (diff) | |
Added IDtoService
57 files changed, 910 insertions, 918 deletions
diff --git a/MediaBrowser.Api/AlbumsService.cs b/MediaBrowser.Api/AlbumsService.cs index cbdf1923b..e78a30c4a 100644 --- a/MediaBrowser.Api/AlbumsService.cs +++ b/MediaBrowser.Api/AlbumsService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; @@ -30,13 +31,15 @@ namespace MediaBrowser.Api /// </summary> private readonly ILibraryManager _libraryManager; private readonly IItemRepository _itemRepo; + private readonly IDtoService _dtoService; - public AlbumsService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public AlbumsService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _userDataRepository = userDataRepository; _libraryManager = libraryManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -50,6 +53,7 @@ namespace MediaBrowser.Api _itemRepo, _libraryManager, _userDataRepository, + _dtoService, Logger, request, item => item is MusicAlbum, GetAlbumSimilarityScore); diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs index d88840e80..ae328f70f 100644 --- a/MediaBrowser.Api/GamesService.cs +++ b/MediaBrowser.Api/GamesService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using ServiceStack.ServiceHost; @@ -34,6 +35,7 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IItemRepository _itemRepo; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="GamesService" /> class. @@ -42,12 +44,13 @@ namespace MediaBrowser.Api /// <param name="userDataRepository">The user data repository.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="itemRepo">The item repo.</param> - public GamesService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public GamesService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _userDataRepository = userDataRepository; _libraryManager = libraryManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -61,6 +64,7 @@ namespace MediaBrowser.Api _itemRepo, _libraryManager, _userDataRepository, + _dtoService, Logger, request, item => item is Game, SimilarItemsHelper.GetSimiliarityScore); diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 678f89c2c..496c7be1b 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -337,21 +337,19 @@ namespace MediaBrowser.Api.Images private readonly IProviderManager _providerManager; private readonly IItemRepository _itemRepo; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="ImageService" /> class. /// </summary> - /// <param name="userManager">The user manager.</param> - /// <param name="libraryManager">The library manager.</param> - /// <param name="appPaths">The app paths.</param> - /// <param name="providerManager">The provider manager.</param> - public ImageService(IUserManager userManager, ILibraryManager libraryManager, IApplicationPaths appPaths, IProviderManager providerManager, IItemRepository itemRepo) + public ImageService(IUserManager userManager, ILibraryManager libraryManager, IApplicationPaths appPaths, IProviderManager providerManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _libraryManager = libraryManager; _appPaths = appPaths; _providerManager = providerManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -361,7 +359,7 @@ namespace MediaBrowser.Api.Images /// <returns>System.Object.</returns> public object Get(GetItemImageInfos request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); var result = GetItemImageInfos(item).Result; @@ -512,7 +510,7 @@ namespace MediaBrowser.Api.Images /// <returns>System.Object.</returns> public object Get(GetItemImage request) { - var item = string.IsNullOrEmpty(request.Id) ? _libraryManager.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = string.IsNullOrEmpty(request.Id) ? _libraryManager.RootFolder : _dtoService.GetItemByDtoId(request.Id); return GetImage(request, item); } @@ -824,9 +822,10 @@ namespace MediaBrowser.Api.Images } } - var memoryStream = new MemoryStream(bytes); - - memoryStream.Position = 0; + var memoryStream = new MemoryStream(bytes) + { + Position = 0 + }; var imageIndex = 0; diff --git a/MediaBrowser.Api/InstantMixService.cs b/MediaBrowser.Api/InstantMixService.cs index dbdc5cd93..23472a93d 100644 --- a/MediaBrowser.Api/InstantMixService.cs +++ b/MediaBrowser.Api/InstantMixService.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; @@ -42,22 +41,20 @@ namespace MediaBrowser.Api public class InstantMixService : BaseApiService { private readonly IUserManager _userManager; - private readonly IUserDataRepository _userDataRepository; private readonly ILibraryManager _libraryManager; - private readonly IItemRepository _itemRepo; + private readonly IDtoService _dtoService; - public InstantMixService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public InstantMixService(IUserManager userManager, ILibraryManager libraryManager, IDtoService dtoService) { _userManager = userManager; - _userDataRepository = userDataRepository; _libraryManager = libraryManager; - _itemRepo = itemRepo; + _dtoService = dtoService; } public object Get(GetInstantMixFromSong request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); var result = GetInstantMixResult(request, item.Genres).Result; @@ -66,7 +63,7 @@ namespace MediaBrowser.Api public object Get(GetInstantMixFromAlbum request) { - var album = (MusicAlbum)DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var album = (MusicAlbum)_dtoService.GetItemByDtoId(request.Id); var genres = album .RecursiveChildren @@ -112,8 +109,6 @@ namespace MediaBrowser.Api var fields = request.GetItemFields().ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var inputItems = user == null ? _libraryManager.RootFolder.RecursiveChildren : user.RootFolder.GetRecursiveChildren(user); @@ -138,7 +133,7 @@ namespace MediaBrowser.Api }; var tasks = items.Take(request.Limit ?? items.Length) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); result.Items = await Task.WhenAll(tasks).ConfigureAwait(false); diff --git a/MediaBrowser.Api/ItemRefreshService.cs b/MediaBrowser.Api/ItemRefreshService.cs index f6e5a2cba..e31292e9d 100644 --- a/MediaBrowser.Api/ItemRefreshService.cs +++ b/MediaBrowser.Api/ItemRefreshService.cs @@ -1,9 +1,9 @@ -using System.Linq; -using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using ServiceStack.ServiceHost; using System; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -92,12 +92,12 @@ namespace MediaBrowser.Api public class ItemRefreshService : BaseApiService { private readonly ILibraryManager _libraryManager; - private readonly IUserManager _userManager; + private readonly IDtoService _dtoService; - public ItemRefreshService(ILibraryManager libraryManager, IUserManager userManager) + public ItemRefreshService(ILibraryManager libraryManager, IDtoService dtoService) { _libraryManager = libraryManager; - _userManager = userManager; + _dtoService = dtoService; } public void Post(RefreshArtist request) @@ -244,7 +244,7 @@ namespace MediaBrowser.Api /// <returns>Task.</returns> private async Task RefreshItem(RefreshItem request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); var folder = item as Folder; diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 8e3c5ca8d..aff81283d 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -72,12 +72,12 @@ namespace MediaBrowser.Api public class ItemUpdateService : BaseApiService { private readonly ILibraryManager _libraryManager; - private readonly IUserManager _userManager; + private readonly IDtoService _dtoService; - public ItemUpdateService(ILibraryManager libraryManager, IUserManager userManager) + public ItemUpdateService(ILibraryManager libraryManager, IDtoService dtoService) { _libraryManager = libraryManager; - _userManager = userManager; + _dtoService = dtoService; } public void Post(UpdateItem request) @@ -89,7 +89,7 @@ namespace MediaBrowser.Api private Task UpdateItem(UpdateItem request) { - var item = DtoBuilder.GetItemByClientId(request.ItemId, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.ItemId); UpdateItem(request, item); diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index ed2ef3884..14b68942c 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -187,27 +187,24 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IUserManager _userManager; - private readonly IUserDataRepository _userDataRepository; + + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="LibraryService" /> class. /// </summary> - /// <param name="itemRepo">The item repo.</param> - /// <param name="libraryManager">The library manager.</param> - /// <param name="userManager">The user manager.</param> - /// <param name="userDataRepository">The user data repository.</param> public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager, - IUserDataRepository userDataRepository) + IDtoService dtoService) { _itemRepo = itemRepo; _libraryManager = libraryManager; _userManager = userManager; - _userDataRepository = userDataRepository; + _dtoService = dtoService; } public object Get(GetFile request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual) { @@ -240,7 +237,7 @@ namespace MediaBrowser.Api /// <returns>Task{BaseItemDto[]}.</returns> public async Task<BaseItemDto[]> GetAncestors(GetAncestors request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); var tasks = new List<Task<BaseItemDto>>(); @@ -251,8 +248,6 @@ namespace MediaBrowser.Api .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - BaseItem parent = item.Parent; while (parent != null) @@ -262,7 +257,7 @@ namespace MediaBrowser.Api parent = TranslateParentItem(parent, user); } - tasks.Add(dtoBuilder.GetBaseItemDto(parent, fields, user)); + tasks.Add(_dtoService.GetBaseItemDto(parent, fields, user)); if (parent is UserRootFolder) { @@ -379,7 +374,7 @@ namespace MediaBrowser.Api private async Task DeleteItem(DeleteItem request) { - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.Id); var parent = item.Parent; @@ -505,7 +500,7 @@ namespace MediaBrowser.Api ? (request.UserId.HasValue ? user.RootFolder : (Folder)_libraryManager.RootFolder) - : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, request.UserId); + : _dtoService.GetItemByDtoId(request.Id, request.UserId); while (item.ThemeSongIds.Count == 0 && request.InheritFromParent && item.Parent != null) { @@ -517,11 +512,9 @@ namespace MediaBrowser.Api .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var tasks = item.ThemeSongIds.Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); var items = await Task.WhenAll(tasks).ConfigureAwait(false); @@ -529,7 +522,7 @@ namespace MediaBrowser.Api { Items = items, TotalRecordCount = items.Length, - OwnerId = DtoBuilder.GetClientItemId(item) + OwnerId = _dtoService.GetDtoId(item) }; } @@ -553,7 +546,7 @@ namespace MediaBrowser.Api ? (request.UserId.HasValue ? user.RootFolder : (Folder)_libraryManager.RootFolder) - : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, request.UserId); + : _dtoService.GetItemByDtoId(request.Id, request.UserId); while (item.ThemeVideoIds.Count == 0 && request.InheritFromParent && item.Parent != null) { @@ -566,11 +559,9 @@ namespace MediaBrowser.Api .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var tasks = item.ThemeVideoIds.Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); var items = await Task.WhenAll(tasks).ConfigureAwait(false); @@ -578,7 +569,7 @@ namespace MediaBrowser.Api { Items = items, TotalRecordCount = items.Length, - OwnerId = DtoBuilder.GetClientItemId(item) + OwnerId = _dtoService.GetDtoId(item) }; } } diff --git a/MediaBrowser.Api/MoviesService.cs b/MediaBrowser.Api/MoviesService.cs index 5ec9aa103..b0a4268da 100644 --- a/MediaBrowser.Api/MoviesService.cs +++ b/MediaBrowser.Api/MoviesService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; @@ -42,19 +43,21 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IItemRepository _itemRepo; - + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="MoviesService"/> class. /// </summary> /// <param name="userManager">The user manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="libraryManager">The library manager.</param> - public MoviesService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public MoviesService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _userDataRepository = userDataRepository; _libraryManager = libraryManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -68,6 +71,7 @@ namespace MediaBrowser.Api _itemRepo, _libraryManager, _userDataRepository, + _dtoService, Logger, request, item => item is Movie || (item is Trailer && request.IncludeTrailers), SimilarItemsHelper.GetSimiliarityScore); diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index e08152786..f0b609349 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -31,31 +31,32 @@ namespace MediaBrowser.Api.Playback /// Gets or sets the application paths. /// </summary> /// <value>The application paths.</value> - protected IServerApplicationPaths ApplicationPaths { get; set; } + protected IServerApplicationPaths ApplicationPaths { get; private set; } /// <summary> /// Gets or sets the user manager. /// </summary> /// <value>The user manager.</value> - protected IUserManager UserManager { get; set; } + protected IUserManager UserManager { get; private set; } /// <summary> /// Gets or sets the library manager. /// </summary> /// <value>The library manager.</value> - protected ILibraryManager LibraryManager { get; set; } + protected ILibraryManager LibraryManager { get; private set; } /// <summary> /// Gets or sets the iso manager. /// </summary> /// <value>The iso manager.</value> - protected IIsoManager IsoManager { get; set; } + protected IIsoManager IsoManager { get; private set; } /// <summary> /// Gets or sets the media encoder. /// </summary> /// <value>The media encoder.</value> - protected IMediaEncoder MediaEncoder { get; set; } + protected IMediaEncoder MediaEncoder { get; private set; } + protected IDtoService DtoService { get; private set; } /// <summary> /// Initializes a new instance of the <see cref="BaseStreamingService" /> class. @@ -65,8 +66,9 @@ namespace MediaBrowser.Api.Playback /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - protected BaseStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder) + protected BaseStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService) { + DtoService = dtoService; ApplicationPaths = appPaths; UserManager = userManager; LibraryManager = libraryManager; @@ -751,7 +753,7 @@ namespace MediaBrowser.Api.Playback /// <returns>StreamState.</returns> protected StreamState GetState(StreamRequest request) { - var item = DtoBuilder.GetItemByClientId(request.Id, UserManager, LibraryManager); + var item = DtoService.GetItemByDtoId(request.Id); var media = (IHasMediaStreams)item; diff --git a/MediaBrowser.Api/Playback/Hls/AudioHlsService.cs b/MediaBrowser.Api/Playback/Hls/AudioHlsService.cs index afd696545..68a252d1b 100644 --- a/MediaBrowser.Api/Playback/Hls/AudioHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/AudioHlsService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.MediaInfo; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.IO; @@ -53,8 +54,8 @@ namespace MediaBrowser.Api.Playback.Hls /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - public AudioHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder) - : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder) + public AudioHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService) + : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, dtoService) { } diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index 7db38ddfc..6c56425a6 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.MediaInfo; using MediaBrowser.Common.Net; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.IO; @@ -37,8 +38,8 @@ namespace MediaBrowser.Api.Playback.Hls /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - protected BaseHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder) - : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder) + protected BaseHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService) + : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, dtoService) { } diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 983b49d53..dfe154c09 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.MediaInfo; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Model.IO; using ServiceStack.ServiceHost; @@ -69,8 +70,8 @@ namespace MediaBrowser.Api.Playback.Hls /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - public VideoHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder) - : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder) + public VideoHlsService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService) + : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, dtoService) { } diff --git a/MediaBrowser.Api/Playback/Progressive/AudioService.cs b/MediaBrowser.Api/Playback/Progressive/AudioService.cs index 337a290b4..d935fea79 100644 --- a/MediaBrowser.Api/Playback/Progressive/AudioService.cs +++ b/MediaBrowser.Api/Playback/Progressive/AudioService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.MediaInfo; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.IO; @@ -48,8 +49,8 @@ namespace MediaBrowser.Api.Playback.Progressive /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - public AudioService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo) - : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, itemRepo) + public AudioService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IDtoService dtoService) + : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, itemRepo, dtoService) { } diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs index feacc3fd0..21ef2ba0a 100644 --- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs +++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.MediaInfo; using MediaBrowser.Common.Net; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; @@ -23,9 +24,9 @@ namespace MediaBrowser.Api.Playback.Progressive public abstract class BaseProgressiveStreamingService : BaseStreamingService { protected readonly IItemRepository ItemRepository; - - protected BaseProgressiveStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepository) : - base(appPaths, userManager, libraryManager, isoManager, mediaEncoder) + + protected BaseProgressiveStreamingService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepository, IDtoService dtoService) : + base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, dtoService) { ItemRepository = itemRepository; } @@ -302,7 +303,7 @@ namespace MediaBrowser.Api.Playback.Progressive } } - return new ImageService(UserManager, LibraryManager, ApplicationPaths, null, ItemRepository) + return new ImageService(UserManager, LibraryManager, ApplicationPaths, null, ItemRepository, DtoService) { Logger = Logger, RequestContext = RequestContext, @@ -342,7 +343,7 @@ namespace MediaBrowser.Api.Playback.Progressive ApiEntryPoint.Instance.OnTranscodeBeginRequest(outputPath, TranscodingJobType.Progressive); } - var result = new ProgressiveStreamWriter(outputPath, state, Logger); + var result = new ProgressiveStreamWriter(outputPath, Logger); result.Options["Accept-Ranges"] = "none"; result.Options["Content-Type"] = contentType; diff --git a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs index 6eb3eb643..c967a0d01 100644 --- a/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs +++ b/MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs @@ -12,7 +12,6 @@ namespace MediaBrowser.Api.Playback.Progressive public class ProgressiveStreamWriter : IStreamWriter, IHasOptions { private string Path { get; set; } - private StreamState State { get; set; } private ILogger Logger { get; set; } /// <summary> @@ -32,12 +31,10 @@ namespace MediaBrowser.Api.Playback.Progressive /// Initializes a new instance of the <see cref="ProgressiveStreamWriter" /> class. /// </summary> /// <param name="path">The path.</param> - /// <param name="state">The state.</param> /// <param name="logger">The logger.</param> - public ProgressiveStreamWriter(string path, StreamState state, ILogger logger) + public ProgressiveStreamWriter(string path, ILogger logger) { Path = path; - State = state; Logger = logger; } diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index 851a46edc..eb53bc2ce 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.MediaInfo; using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; @@ -60,8 +61,8 @@ namespace MediaBrowser.Api.Playback.Progressive /// <param name="libraryManager">The library manager.</param> /// <param name="isoManager">The iso manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - public VideoService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo) - : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, itemRepo) + public VideoService(IServerApplicationPaths appPaths, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IDtoService dtoService) + : base(appPaths, userManager, libraryManager, isoManager, mediaEncoder, itemRepo, dtoService) { } diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index f889706c0..33b7422e6 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -65,6 +65,7 @@ namespace MediaBrowser.Api /// </summary> private readonly ILibrarySearchEngine _searchEngine; private readonly ILibraryManager _libraryManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="SearchService" /> class. @@ -72,11 +73,12 @@ namespace MediaBrowser.Api /// <param name="userManager">The user manager.</param> /// <param name="searchEngine">The search engine.</param> /// <param name="libraryManager">The library manager.</param> - public SearchService(IUserManager userManager, ILibrarySearchEngine searchEngine, ILibraryManager libraryManager) + public SearchService(IUserManager userManager, ILibrarySearchEngine searchEngine, ILibraryManager libraryManager, IDtoService dtoService) { _userManager = userManager; _searchEngine = searchEngine; _libraryManager = libraryManager; + _dtoService = dtoService; } /// <summary> @@ -149,7 +151,7 @@ namespace MediaBrowser.Api Name = item.Name, IndexNumber = item.IndexNumber, ParentIndexNumber = item.ParentIndexNumber, - ItemId = DtoBuilder.GetClientItemId(item), + ItemId = _dtoService.GetDtoId(item), Type = item.GetType().Name, MediaType = item.MediaType, MatchedTerm = hintInfo.MatchedTerm, diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs index bd05c3250..a0ef4a9a3 100644 --- a/MediaBrowser.Api/SessionsService.cs +++ b/MediaBrowser.Api/SessionsService.cs @@ -180,13 +180,16 @@ namespace MediaBrowser.Api /// </summary> private readonly ISessionManager _sessionManager; + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="SessionsService" /> class. /// </summary> /// <param name="sessionManager">The session manager.</param> - public SessionsService(ISessionManager sessionManager) + public SessionsService(ISessionManager sessionManager, IDtoService dtoService) { _sessionManager = sessionManager; + _dtoService = dtoService; } /// <summary> @@ -203,7 +206,7 @@ namespace MediaBrowser.Api result = result.Where(i => i.SupportsRemoteControl == request.SupportsRemoteControl.Value); } - return ToOptimizedResult(result.Select(SessionInfoDtoBuilder.GetSessionInfoDto).ToList()); + return ToOptimizedResult(result.Select(_dtoService.GetSessionInfoDto).ToList()); } public void Post(SendPlaystateCommand request) diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs index 7af3b399e..5d10afd2c 100644 --- a/MediaBrowser.Api/SimilarItemsHelper.cs +++ b/MediaBrowser.Api/SimilarItemsHelper.cs @@ -87,23 +87,22 @@ namespace MediaBrowser.Api /// <param name="itemRepository">The item repository.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="userDataRepository">The user data repository.</param> + /// <param name="dtoService">The dto service.</param> /// <param name="logger">The logger.</param> /// <param name="request">The request.</param> /// <param name="includeInSearch">The include in search.</param> /// <param name="getSimilarityScore">The get similarity score.</param> /// <returns>ItemsResult.</returns> - internal static ItemsResult GetSimilarItemsResult(IUserManager userManager, IItemRepository itemRepository, ILibraryManager libraryManager, IUserDataRepository userDataRepository, ILogger logger, BaseGetSimilarItemsFromItem request, Func<BaseItem, bool> includeInSearch, Func<BaseItem, BaseItem, int> getSimilarityScore) + internal static ItemsResult GetSimilarItemsResult(IUserManager userManager, IItemRepository itemRepository, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IDtoService dtoService, ILogger logger, BaseGetSimilarItemsFromItem request, Func<BaseItem, bool> includeInSearch, Func<BaseItem, BaseItem, int> getSimilarityScore) { var user = request.UserId.HasValue ? userManager.GetUserById(request.UserId.Value) : null; var item = string.IsNullOrEmpty(request.Id) ? (request.UserId.HasValue ? user.RootFolder : - (Folder)libraryManager.RootFolder) : DtoBuilder.GetItemByClientId(request.Id, userManager, libraryManager, request.UserId); + (Folder)libraryManager.RootFolder) : dtoService.GetItemByDtoId(request.Id, request.UserId); var fields = request.GetItemFields().ToList(); - var dtoBuilder = new DtoBuilder(logger, libraryManager, userDataRepository, itemRepository); - var inputItems = user == null ? libraryManager.RootFolder.RecursiveChildren : user.RootFolder.GetRecursiveChildren(user); @@ -113,7 +112,7 @@ namespace MediaBrowser.Api var result = new ItemsResult { - Items = items.Take(request.Limit ?? items.Length).Select(i => dtoBuilder.GetBaseItemDto(i, fields, user)).Select(t => t.Result).ToArray(), + Items = items.Take(request.Limit ?? items.Length).Select(i => dtoService.GetBaseItemDto(i, fields, user)).Select(t => t.Result).ToArray(), TotalRecordCount = items.Length }; diff --git a/MediaBrowser.Api/TrailersService.cs b/MediaBrowser.Api/TrailersService.cs index ba544a49b..c6336847a 100644 --- a/MediaBrowser.Api/TrailersService.cs +++ b/MediaBrowser.Api/TrailersService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; @@ -35,19 +36,21 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IItemRepository _itemRepo; - + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="TrailersService"/> class. /// </summary> /// <param name="userManager">The user manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="libraryManager">The library manager.</param> - public TrailersService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public TrailersService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _userDataRepository = userDataRepository; _libraryManager = libraryManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -61,6 +64,7 @@ namespace MediaBrowser.Api _itemRepo, _libraryManager, _userDataRepository, + _dtoService, Logger, request, item => item is Movie || item is Trailer, SimilarItemsHelper.GetSimiliarityScore); diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs index cdb27fb0c..0e0493747 100644 --- a/MediaBrowser.Api/TvShowsService.cs +++ b/MediaBrowser.Api/TvShowsService.cs @@ -101,19 +101,21 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IItemRepository _itemRepo; - + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="TvShowsService" /> class. /// </summary> /// <param name="userManager">The user manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="libraryManager">The library manager.</param> - public TvShowsService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo) + public TvShowsService(IUserManager userManager, IUserDataRepository userDataRepository, ILibraryManager libraryManager, IItemRepository itemRepo, IDtoService dtoService) { _userManager = userManager; _userDataRepository = userDataRepository; _libraryManager = libraryManager; _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -127,6 +129,7 @@ namespace MediaBrowser.Api _itemRepo, _libraryManager, _userDataRepository, + _dtoService, Logger, request, item => item is Series, SimilarItemsHelper.GetSimiliarityScore); @@ -253,9 +256,7 @@ namespace MediaBrowser.Api /// <returns>Task.</returns> private Task<BaseItemDto[]> GetItemDtos(IEnumerable<BaseItem> pagedItems, User user, List<ItemFields> fields) { - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - - return Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user))); + return Task.WhenAll(pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user))); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index f65de2e69..3213b2e67 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -75,8 +75,8 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="libraryManager">The library manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="itemRepo">The item repo.</param> - public ArtistsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public ArtistsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -104,16 +104,14 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 0b54541e5..8bb07caa9 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -30,6 +30,7 @@ namespace MediaBrowser.Api.UserLibrary protected readonly ILibraryManager LibraryManager; protected readonly IUserDataRepository UserDataRepository; protected readonly IItemRepository ItemRepository; + protected IDtoService DtoService { get; private set; } /// <summary> /// Initializes a new instance of the <see cref="BaseItemsByNameService{TItemType}" /> class. @@ -37,12 +38,13 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="userManager">The user manager.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="userDataRepository">The user data repository.</param> - protected BaseItemsByNameService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepository) + protected BaseItemsByNameService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepository, IDtoService dtoService) { UserManager = userManager; LibraryManager = libraryManager; UserDataRepository = userDataRepository; ItemRepository = itemRepository; + DtoService = dtoService; } /// <summary> @@ -58,11 +60,11 @@ namespace MediaBrowser.Api.UserLibrary if (request.UserId.HasValue) { user = UserManager.GetUserById(request.UserId.Value); - item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.ParentId, UserManager, LibraryManager, user.Id); + item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : DtoService.GetItemByDtoId(request.ParentId, user.Id); } else { - item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : DtoBuilder.GetItemByClientId(request.ParentId, UserManager, LibraryManager); + item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : DtoService.GetItemByDtoId(request.ParentId); } IEnumerable<BaseItem> items; @@ -285,8 +287,8 @@ namespace MediaBrowser.Api.UserLibrary return null; } - var dto = user == null ? await new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository).GetBaseItemDto(item, fields).ConfigureAwait(false) : - await new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository).GetBaseItemDto(item, fields, user).ConfigureAwait(false); + var dto = user == null ? await DtoService.GetBaseItemDto(item, fields).ConfigureAwait(false) : + await DtoService.GetBaseItemDto(item, fields, user).ConfigureAwait(false); if (fields.Contains(ItemFields.ItemCounts)) { diff --git a/MediaBrowser.Api/UserLibrary/GameGenresService.cs b/MediaBrowser.Api/UserLibrary/GameGenresService.cs index 792cdb854..50ee09826 100644 --- a/MediaBrowser.Api/UserLibrary/GameGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GameGenresService.cs @@ -63,8 +63,8 @@ namespace MediaBrowser.Api.UserLibrary public class GameGenresService : BaseItemsByNameService<GameGenre> { - public GameGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public GameGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -92,16 +92,14 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs index f10ca9cf4..83405bf52 100644 --- a/MediaBrowser.Api/UserLibrary/GenresService.cs +++ b/MediaBrowser.Api/UserLibrary/GenresService.cs @@ -69,8 +69,8 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> public class GenresService : BaseItemsByNameService<Genre> { - public GenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public GenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -98,16 +98,14 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs index 1e990b3e9..911fd03b3 100644 --- a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs @@ -138,16 +138,18 @@ namespace MediaBrowser.Api.UserLibrary /// The library manager /// </summary> protected readonly ILibraryManager LibraryManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="ItemByNameUserDataService" /> class. /// </summary> /// <param name="userDataRepository">The user data repository.</param> /// <param name="libraryManager">The library manager.</param> - public ItemByNameUserDataService(IUserDataRepository userDataRepository, ILibraryManager libraryManager) + public ItemByNameUserDataService(IUserDataRepository userDataRepository, ILibraryManager libraryManager, IDtoService dtoService) { UserDataRepository = userDataRepository; LibraryManager = libraryManager; + _dtoService = dtoService; } /// <summary> @@ -230,7 +232,7 @@ namespace MediaBrowser.Api.UserLibrary data = UserDataRepository.GetUserData(userId, key); - return DtoBuilder.GetUserItemDataDto(data); + return _dtoService.GetUserItemDataDto(data); } /// <summary> @@ -256,7 +258,7 @@ namespace MediaBrowser.Api.UserLibrary data = UserDataRepository.GetUserData(userId, key); - return DtoBuilder.GetUserItemDataDto(data); + return _dtoService.GetUserItemDataDto(data); } } } diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index d06941bb8..5013f685a 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -210,8 +210,8 @@ namespace MediaBrowser.Api.UserLibrary private readonly ILibrarySearchEngine _searchEngine; private readonly ILocalizationManager _localization; - private readonly IItemRepository _itemRepo; - + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="ItemsService" /> class. /// </summary> @@ -219,14 +219,14 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="libraryManager">The library manager.</param> /// <param name="searchEngine">The search engine.</param> /// <param name="userDataRepository">The user data repository.</param> - public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILibrarySearchEngine searchEngine, IUserDataRepository userDataRepository, ILocalizationManager localization, IItemRepository itemRepo) + public ItemsService(IUserManager userManager, ILibraryManager libraryManager, ILibrarySearchEngine searchEngine, IUserDataRepository userDataRepository, ILocalizationManager localization, IDtoService dtoService) { _userManager = userManager; _libraryManager = libraryManager; _searchEngine = searchEngine; _userDataRepository = userDataRepository; _localization = localization; - _itemRepo = itemRepo; + _dtoService = dtoService; } /// <summary> @@ -275,9 +275,7 @@ namespace MediaBrowser.Api.UserLibrary var fields = request.GetItemFields().ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - - var returnItems = await Task.WhenAll(pagedItems.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user))).ConfigureAwait(false); + var returnItems = await Task.WhenAll(pagedItems.Select(i => _dtoService.GetBaseItemDto(i, fields, user))).ConfigureAwait(false); return new ItemsResult { @@ -295,7 +293,7 @@ namespace MediaBrowser.Api.UserLibrary /// <exception cref="System.InvalidOperationException"></exception> private IEnumerable<BaseItem> GetItemsToSerialize(GetItems request, User user) { - var item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.ParentId, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : _dtoService.GetItemByDtoId(request.ParentId, user.Id); // Default list type = children @@ -303,7 +301,7 @@ namespace MediaBrowser.Api.UserLibrary { var idList = request.Ids.Split(',').ToList(); - return idList.Select(i => DtoBuilder.GetItemByClientId(i, _userManager, _libraryManager, user.Id)); + return idList.Select(i => _dtoService.GetItemByDtoId(i, user.Id)); } if (request.Recursive) @@ -492,7 +490,7 @@ namespace MediaBrowser.Api.UserLibrary if (!string.IsNullOrEmpty(request.AdjacentTo)) { - var item = DtoBuilder.GetItemByClientId(request.AdjacentTo, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(request.AdjacentTo); var allSiblings = item.Parent.GetChildren(user, true).OrderBy(i => i.SortName).ToList(); diff --git a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs index b4d1b82dd..d9f0016fb 100644 --- a/MediaBrowser.Api/UserLibrary/MusicGenresService.cs +++ b/MediaBrowser.Api/UserLibrary/MusicGenresService.cs @@ -63,8 +63,8 @@ namespace MediaBrowser.Api.UserLibrary public class MusicGenresService : BaseItemsByNameService<MusicGenre> { - public MusicGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public MusicGenresService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -92,16 +92,14 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/PersonsService.cs b/MediaBrowser.Api/UserLibrary/PersonsService.cs index 37df763d2..a21c53976 100644 --- a/MediaBrowser.Api/UserLibrary/PersonsService.cs +++ b/MediaBrowser.Api/UserLibrary/PersonsService.cs @@ -6,7 +6,6 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; @@ -86,8 +85,8 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="libraryManager">The library manager.</param> /// <param name="userDataRepository">The user data repository.</param> /// <param name="itemRepo">The item repo.</param> - public PersonsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public PersonsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -114,17 +113,15 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - + if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/StudiosService.cs b/MediaBrowser.Api/UserLibrary/StudiosService.cs index e19c2bc20..f58adb1fa 100644 --- a/MediaBrowser.Api/UserLibrary/StudiosService.cs +++ b/MediaBrowser.Api/UserLibrary/StudiosService.cs @@ -70,8 +70,8 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> public class StudiosService : BaseItemsByNameService<Studio> { - public StudiosService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public StudiosService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -98,17 +98,15 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - + if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index b80d90e41..4e8ef7d8d 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -366,6 +366,7 @@ namespace MediaBrowser.Api.UserLibrary private readonly IItemRepository _itemRepo; private readonly ISessionManager _sessionManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="UserLibraryService" /> class. @@ -375,13 +376,14 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="userDataRepository">The user data repository.</param> /// <param name="itemRepo">The item repo.</param> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public UserLibraryService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, ISessionManager sessionManager) + public UserLibraryService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, ISessionManager sessionManager, IDtoService dtoService) { _userManager = userManager; _libraryManager = libraryManager; _userDataRepository = userDataRepository; _itemRepo = itemRepo; _sessionManager = sessionManager; + _dtoService = dtoService; } /// <summary> @@ -400,13 +402,11 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _dtoService.GetItemByDtoId(request.Id, user.Id); // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var movie = item as Movie; // Get them from the db @@ -418,7 +418,7 @@ namespace MediaBrowser.Api.UserLibrary var tasks = movie.SpecialFeatureIds .Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, movie1)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user, movie1)); return Task.WhenAll(tasks); } @@ -446,7 +446,7 @@ namespace MediaBrowser.Api.UserLibrary return DateTime.MinValue; }) .ThenBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user)); return Task.WhenAll(tasks); } @@ -470,17 +470,15 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _dtoService.GetItemByDtoId(request.Id, user.Id); // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var tasks = item.LocalTrailerIds .Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item)); + .Select(i => _dtoService.GetBaseItemDto(i, fields, user, item)); return Task.WhenAll(tasks); } @@ -494,14 +492,12 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _dtoService.GetItemByDtoId(request.Id, user.Id); // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - - var result = dtoBuilder.GetBaseItemDto(item, fields, user).Result; + var result = _dtoService.GetBaseItemDto(item, fields, user).Result; return ToOptimizedResult(result); } @@ -520,9 +516,7 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - - var result = dtoBuilder.GetBaseItemDto(item, fields, user).Result; + var result = _dtoService.GetBaseItemDto(item, fields, user).Result; return ToOptimizedResult(result); } @@ -536,7 +530,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : _dtoService.GetItemByDtoId(request.Id, user.Id); var result = _libraryManager.GetIntros(item, user); @@ -569,7 +563,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(userId); - var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : _dtoService.GetItemByDtoId(itemId, user.Id); var key = item.GetUserDataKey(); @@ -583,7 +577,7 @@ namespace MediaBrowser.Api.UserLibrary data = _userDataRepository.GetUserData(user.Id, key); - return DtoBuilder.GetUserItemDataDto(data); + return _dtoService.GetUserItemDataDto(data); } /// <summary> @@ -612,7 +606,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(userId); - var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); + var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : _dtoService.GetItemByDtoId(itemId, user.Id); var key = item.GetUserDataKey(); @@ -625,7 +619,7 @@ namespace MediaBrowser.Api.UserLibrary data = _userDataRepository.GetUserData(user.Id, key); - return DtoBuilder.GetUserItemDataDto(data); + return _dtoService.GetUserItemDataDto(data); } /// <summary> @@ -666,7 +660,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = _dtoService.GetItemByDtoId(request.Id, user.Id); _sessionManager.OnPlaybackStart(item, GetSession().Id); } @@ -679,7 +673,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = _dtoService.GetItemByDtoId(request.Id, user.Id); var task = _sessionManager.OnPlaybackProgress(item, request.PositionTicks, request.IsPaused, request.IsMuted, GetSession().Id); @@ -694,7 +688,7 @@ namespace MediaBrowser.Api.UserLibrary { var user = _userManager.GetUserById(request.UserId); - var item = DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + var item = _dtoService.GetItemByDtoId(request.Id, user.Id); var task = _sessionManager.OnPlaybackStopped(item, request.PositionTicks, GetSession().Id); @@ -723,11 +717,11 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>Task.</returns> private async Task<UserItemDataDto> UpdatePlayedStatus(User user, string itemId, bool wasPlayed) { - var item = DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); + var item = _dtoService.GetItemByDtoId(itemId, user.Id); await item.SetPlayedStatus(user, wasPlayed, _userDataRepository).ConfigureAwait(false); - return DtoBuilder.GetUserItemDataDto(_userDataRepository.GetUserData(user.Id, item.GetUserDataKey())); + return _dtoService.GetUserItemDataDto(_userDataRepository.GetUserData(user.Id, item.GetUserDataKey())); } } } diff --git a/MediaBrowser.Api/UserLibrary/YearsService.cs b/MediaBrowser.Api/UserLibrary/YearsService.cs index bfd493240..b153b6e10 100644 --- a/MediaBrowser.Api/UserLibrary/YearsService.cs +++ b/MediaBrowser.Api/UserLibrary/YearsService.cs @@ -54,8 +54,8 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public YearsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) - : base(userManager, libraryManager, userDataRepository, itemRepo) + public YearsService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, IDtoService dtoService) + : base(userManager, libraryManager, userDataRepository, itemRepo, dtoService) { } @@ -82,17 +82,15 @@ namespace MediaBrowser.Api.UserLibrary // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); - - var builder = new DtoBuilder(Logger, LibraryManager, UserDataRepository, ItemRepository); - + if (request.UserId.HasValue) { var user = UserManager.GetUserById(request.UserId.Value); - return await builder.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList(), user).ConfigureAwait(false); } - return await builder.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); + return await DtoService.GetBaseItemDto(item, fields.ToList()).ConfigureAwait(false); } /// <summary> diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index 1e928c301..5c8d6a868 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -171,16 +171,15 @@ namespace MediaBrowser.Api /// The _user manager /// </summary> private readonly IUserManager _userManager; - private readonly ILibraryManager _libraryManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="UserService" /> class. /// </summary> /// <param name="xmlSerializer">The XML serializer.</param> /// <param name="userManager">The user manager.</param> - /// <param name="libraryManager">The library manager.</param> /// <exception cref="System.ArgumentNullException">xmlSerializer</exception> - public UserService(IXmlSerializer xmlSerializer, IUserManager userManager, ILibraryManager libraryManager) + public UserService(IXmlSerializer xmlSerializer, IUserManager userManager, IDtoService dtoService) : base() { if (xmlSerializer == null) @@ -190,7 +189,7 @@ namespace MediaBrowser.Api _xmlSerializer = xmlSerializer; _userManager = userManager; - _libraryManager = libraryManager; + _dtoService = dtoService; } public object Get(GetPublicUsers request) @@ -209,8 +208,6 @@ namespace MediaBrowser.Api /// <returns>System.Object.</returns> public object Get(GetUsers request) { - var dtoBuilder = new UserDtoBuilder(Logger); - var users = _userManager.Users; if (request.IsDisabled.HasValue) @@ -223,7 +220,7 @@ namespace MediaBrowser.Api users = users.Where(i => i.Configuration.IsHidden == request.IsHidden.Value); } - var tasks = users.OrderBy(u => u.Name).Select(dtoBuilder.GetUserDto).Select(i => i.Result); + var tasks = users.OrderBy(u => u.Name).Select(_dtoService.GetUserDto).Select(i => i.Result); return ToOptimizedResult(tasks.ToList()); } @@ -242,9 +239,7 @@ namespace MediaBrowser.Api throw new ResourceNotFoundException("User not found"); } - var dtoBuilder = new UserDtoBuilder(Logger); - - var result = dtoBuilder.GetUserDto(user).Result; + var result = _dtoService.GetUserDto(user).Result; return ToOptimizedResult(result); } @@ -310,7 +305,7 @@ namespace MediaBrowser.Api var result = new AuthenticationResult { - User = await new UserDtoBuilder(Logger).GetUserDto(user).ConfigureAwait(false) + User = await _dtoService.GetUserDto(user).ConfigureAwait(false) }; return result; @@ -409,9 +404,7 @@ namespace MediaBrowser.Api newUser.UpdateConfiguration(dtoUser.Configuration, _xmlSerializer); - var dtoBuilder = new UserDtoBuilder(Logger); - - var result = dtoBuilder.GetUserDto(newUser).Result; + var result = _dtoService.GetUserDto(newUser).Result; return ToOptimizedResult(result); } diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs index 3208ad46d..9827ac50f 100644 --- a/MediaBrowser.Api/VideosService.cs +++ b/MediaBrowser.Api/VideosService.cs @@ -30,14 +30,14 @@ namespace MediaBrowser.Api private readonly ILibraryManager _libraryManager; private readonly IUserManager _userManager; - private readonly IUserDataRepository _userDataRepository; + private readonly IDtoService _dtoService; - public VideosService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager, IUserDataRepository userDataRepository) + public VideosService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager, IDtoService dtoService) { _itemRepo = itemRepo; _libraryManager = libraryManager; _userManager = userManager; - _userDataRepository = userDataRepository; + _dtoService = dtoService; } /// <summary> @@ -53,20 +53,18 @@ namespace MediaBrowser.Api ? (request.UserId.HasValue ? user.RootFolder : (Folder)_libraryManager.RootFolder) - : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, request.UserId); + : _dtoService.GetItemByDtoId(request.Id, request.UserId); // Get everything var fields = Enum.GetNames(typeof(ItemFields)) .Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)) .ToList(); - var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo); - var video = (Video)item; var items = video.AdditionalPartIds.Select(_itemRepo.RetrieveItem) .OrderBy(i => i.SortName) - .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, video)) + .Select(i => _dtoService.GetBaseItemDto(i, fields, user, video)) .Select(t => t.Result) .ToArray(); diff --git a/MediaBrowser.Api/WebSocket/SessionInfoWebSocketListener.cs b/MediaBrowser.Api/WebSocket/SessionInfoWebSocketListener.cs index f010ac375..38139645e 100644 --- a/MediaBrowser.Api/WebSocket/SessionInfoWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/SessionInfoWebSocketListener.cs @@ -14,6 +14,8 @@ namespace MediaBrowser.Api.WebSocket /// </summary> class SessionInfoWebSocketListener : BasePeriodicWebSocketListener<IEnumerable<SessionInfoDto>, object> { + private readonly IDtoService _dtoService; + /// <summary> /// Gets the name. /// </summary> @@ -33,10 +35,11 @@ namespace MediaBrowser.Api.WebSocket /// </summary> /// <param name="logger">The logger.</param> /// <param name="sessionManager">The session manager.</param> - public SessionInfoWebSocketListener(ILogger logger, ISessionManager sessionManager) + public SessionInfoWebSocketListener(ILogger logger, ISessionManager sessionManager, IDtoService dtoService) : base(logger) { _sessionManager = sessionManager; + _dtoService = dtoService; } /// <summary> @@ -46,7 +49,7 @@ namespace MediaBrowser.Api.WebSocket /// <returns>Task{SystemInfo}.</returns> protected override Task<IEnumerable<SessionInfoDto>> GetDataToSend(object state) { - return Task.FromResult(_sessionManager.Sessions.Select(SessionInfoDtoBuilder.GetSessionInfoDto)); + return Task.FromResult(_sessionManager.Sessions.Select(_dtoService.GetSessionInfoDto)); } } } diff --git a/MediaBrowser.Controller/Drawing/ImageManager.cs b/MediaBrowser.Controller/Drawing/ImageManager.cs index 2ccc0dc65..51ae6b7ca 100644 --- a/MediaBrowser.Controller/Drawing/ImageManager.cs +++ b/MediaBrowser.Controller/Drawing/ImageManager.cs @@ -612,7 +612,7 @@ namespace MediaBrowser.Controller.Drawing /// <param name="supportedEnhancers">The supported enhancers.</param> /// <returns>System.String.</returns> /// <exception cref="System.ArgumentNullException">originalImagePath</exception> - public async Task<string> GetEnhancedImage(string originalImagePath, DateTime dateModified, BaseItem item, ImageType imageType, int imageIndex, IEnumerable<IImageEnhancer> supportedEnhancers) + public async Task<string> GetEnhancedImage(string originalImagePath, DateTime dateModified, BaseItem item, ImageType imageType, int imageIndex, List<IImageEnhancer> supportedEnhancers) { if (string.IsNullOrEmpty(originalImagePath)) { diff --git a/MediaBrowser.Controller/Dto/IDtoService.cs b/MediaBrowser.Controller/Dto/IDtoService.cs new file mode 100644 index 000000000..8a023832a --- /dev/null +++ b/MediaBrowser.Controller/Dto/IDtoService.cs @@ -0,0 +1,71 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Session; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Session; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Dto +{ + /// <summary> + /// Interface IDtoService + /// </summary> + public interface IDtoService + { + /// <summary> + /// Gets the user dto. + /// </summary> + /// <param name="user">The user.</param> + /// <returns>Task{UserDto}.</returns> + Task<UserDto> GetUserDto(User user); + + /// <summary> + /// Gets the session info dto. + /// </summary> + /// <param name="session">The session.</param> + /// <returns>SessionInfoDto.</returns> + SessionInfoDto GetSessionInfoDto(SessionInfo session); + + /// <summary> + /// Gets the base item info. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>BaseItemInfo.</returns> + BaseItemInfo GetBaseItemInfo(BaseItem item); + + /// <summary> + /// Gets the dto id. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>System.String.</returns> + string GetDtoId(BaseItem item); + + /// <summary> + /// Gets the user item data dto. + /// </summary> + /// <param name="data">The data.</param> + /// <returns>UserItemDataDto.</returns> + UserItemDataDto GetUserItemDataDto(UserItemData data); + + /// <summary> + /// Gets the item by dto id. + /// </summary> + /// <param name="id">The id.</param> + /// <param name="userId">The user id.</param> + /// <returns>BaseItem.</returns> + BaseItem GetItemByDtoId(string id, Guid? userId = null); + + /// <summary> + /// Gets the base item dto. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="fields">The fields.</param> + /// <param name="user">The user.</param> + /// <param name="owner">The owner.</param> + /// <returns>Task{BaseItemDto}.</returns> + Task<BaseItemDto> GetBaseItemDto(BaseItem item, List<ItemFields> fields, User user = null, BaseItem owner = null); + } +} diff --git a/MediaBrowser.Controller/Dto/SessionInfoDtoBuilder.cs b/MediaBrowser.Controller/Dto/SessionInfoDtoBuilder.cs deleted file mode 100644 index 01baa7356..000000000 --- a/MediaBrowser.Controller/Dto/SessionInfoDtoBuilder.cs +++ /dev/null @@ -1,50 +0,0 @@ -using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Session; - -namespace MediaBrowser.Controller.Dto -{ - /// <summary> - /// Class SessionInfoDtoBuilder - /// </summary> - public static class SessionInfoDtoBuilder - { - /// <summary> - /// Gets the session info dto. - /// </summary> - /// <param name="session">The session.</param> - /// <returns>SessionInfoDto.</returns> - public static SessionInfoDto GetSessionInfoDto(SessionInfo session) - { - var dto = new SessionInfoDto - { - Client = session.Client, - DeviceId = session.DeviceId, - DeviceName = session.DeviceName, - Id = session.Id.ToString("N"), - LastActivityDate = session.LastActivityDate, - NowPlayingPositionTicks = session.NowPlayingPositionTicks, - SupportsRemoteControl = session.SupportsRemoteControl, - IsPaused = session.IsPaused, - IsMuted = session.IsMuted, - NowViewingContext = session.NowViewingContext, - NowViewingItemId = session.NowViewingItemId, - NowViewingItemName = session.NowViewingItemName, - NowViewingItemType = session.NowViewingItemType, - ApplicationVersion = session.ApplicationVersion - }; - - if (session.NowPlayingItem != null) - { - dto.NowPlayingItem = DtoBuilder.GetBaseItemInfo(session.NowPlayingItem); - } - - if (session.User != null) - { - dto.UserId = session.User.Id.ToString("N"); - dto.UserName = session.User.Name; - } - - return dto; - } - } -} diff --git a/MediaBrowser.Controller/Dto/UserDtoBuilder.cs b/MediaBrowser.Controller/Dto/UserDtoBuilder.cs deleted file mode 100644 index 892bd5dd0..000000000 --- a/MediaBrowser.Controller/Dto/UserDtoBuilder.cs +++ /dev/null @@ -1,72 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Model.Dto; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; -using System; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.Dto -{ - /// <summary> - /// Class UserDtoBuilder - /// </summary> - public class UserDtoBuilder - { - /// <summary> - /// The _logger - /// </summary> - private readonly ILogger _logger; - - /// <summary> - /// Initializes a new instance of the <see cref="UserDtoBuilder"/> class. - /// </summary> - /// <param name="logger">The logger.</param> - public UserDtoBuilder(ILogger logger) - { - _logger = logger; - } - - /// <summary> - /// Converts a User to a DTOUser - /// </summary> - /// <param name="user">The user.</param> - /// <returns>DtoUser.</returns> - /// <exception cref="System.ArgumentNullException">user</exception> - public async Task<UserDto> GetUserDto(User user) - { - if (user == null) - { - throw new ArgumentNullException("user"); - } - - var dto = new UserDto - { - Id = user.Id.ToString("N"), - Name = user.Name, - HasPassword = !String.IsNullOrEmpty(user.Password), - LastActivityDate = user.LastActivityDate, - LastLoginDate = user.LastLoginDate, - Configuration = user.Configuration - }; - - var image = user.PrimaryImagePath; - - if (!string.IsNullOrEmpty(image)) - { - dto.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(user, ImageType.Primary, image); - - try - { - await DtoBuilder.AttachPrimaryImageAspectRatio(dto, user, _logger).ConfigureAwait(false); - } - catch (Exception ex) - { - // Have to use a catch-all unfortunately because some .net image methods throw plain Exceptions - _logger.ErrorException("Error generating PrimaryImageAspectRatio for {0}", ex, user.Name); - } - } - - return dto; - } - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 713f52180..0d00d50ce 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -71,10 +71,10 @@ <Compile Include="..\SharedVersion.cs"> <Link>Properties\SharedVersion.cs</Link> </Compile> + <Compile Include="Dto\IDtoService.cs" /> <Compile Include="Entities\AdultVideo.cs" /> <Compile Include="Entities\Book.cs" /> <Compile Include="Notifications\Configuration\IServerConfigurationManager.cs" /> - <Compile Include="Dto\SessionInfoDtoBuilder.cs" /> <Compile Include="Entities\Audio\MusicGenre.cs" /> <Compile Include="Entities\Game.cs" /> <Compile Include="Entities\GameGenre.cs" /> @@ -93,7 +93,6 @@ <Compile Include="Drawing\ImageExtensions.cs" /> <Compile Include="Drawing\ImageHeader.cs" /> <Compile Include="Drawing\ImageManager.cs" /> - <Compile Include="Dto\UserDtoBuilder.cs" /> <Compile Include="Entities\AggregateFolder.cs" /> <Compile Include="Entities\Audio\Artist.cs" /> <Compile Include="Entities\Audio\Audio.cs" /> @@ -128,7 +127,6 @@ <Compile Include="IO\NativeMethods.cs" /> <Compile Include="IServerApplicationHost.cs" /> <Compile Include="IServerApplicationPaths.cs" /> - <Compile Include="Dto\DtoBuilder.cs" /> <Compile Include="Library\SearchHintInfo.cs" /> <Compile Include="Providers\IProviderManager.cs" /> <Compile Include="MediaInfo\MediaEncoderHelpers.cs" /> diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs index 1cb43b43a..bbe5ddbaa 100644 --- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs +++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs @@ -1,12 +1,11 @@ -using System.Collections.Generic; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Common.MediaInfo; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; @@ -31,8 +30,6 @@ namespace MediaBrowser.Controller.MediaInfo /// <value>The subtitle cache.</value> internal FileSystemRepository SubtitleCache { get; set; } - private readonly ILibraryManager _libraryManager; - private readonly IServerApplicationPaths _appPaths; private readonly IMediaEncoder _encoder; private readonly ILogger _logger; @@ -43,15 +40,13 @@ namespace MediaBrowser.Controller.MediaInfo /// </summary> /// <param name="appPaths">The app paths.</param> /// <param name="encoder">The encoder.</param> - /// <param name="libraryManager">The library manager.</param> /// <param name="logger">The logger.</param> /// <param name="itemRepo">The item repo.</param> /// <exception cref="System.ArgumentNullException">zipClient</exception> - public FFMpegManager(IServerApplicationPaths appPaths, IMediaEncoder encoder, ILibraryManager libraryManager, ILogger logger, IItemRepository itemRepo) + public FFMpegManager(IServerApplicationPaths appPaths, IMediaEncoder encoder, ILogger logger, IItemRepository itemRepo) { _appPaths = appPaths; _encoder = encoder; - _libraryManager = libraryManager; _logger = logger; _itemRepo = itemRepo; diff --git a/MediaBrowser.Controller/Persistence/IRepository.cs b/MediaBrowser.Controller/Persistence/IRepository.cs index f6367c384..2340ca646 100644 --- a/MediaBrowser.Controller/Persistence/IRepository.cs +++ b/MediaBrowser.Controller/Persistence/IRepository.cs @@ -1,5 +1,4 @@ using System; -using System.Threading.Tasks; namespace MediaBrowser.Controller.Persistence { diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index 2b856d110..44bc461f3 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -39,21 +39,14 @@ namespace MediaBrowser.Providers.MediaInfo private readonly IMediaEncoder _mediaEncoder; /// <summary> - /// The _library manager - /// </summary> - private readonly ILibraryManager _libraryManager; - - /// <summary> /// Initializes a new instance of the <see cref="BaseMetadataProvider" /> class. /// </summary> /// <param name="logManager">The log manager.</param> /// <param name="configurationManager">The configuration manager.</param> - /// <param name="libraryManager">The library manager.</param> /// <param name="mediaEncoder">The media encoder.</param> - public AudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IMediaEncoder mediaEncoder) + public AudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IMediaEncoder mediaEncoder) : base(logManager, configurationManager) { - _libraryManager = libraryManager; _mediaEncoder = mediaEncoder; ImageCache = new FileSystemRepository(Kernel.Instance.FFMpegManager.AudioImagesDataPath); diff --git a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs index 512cef09c..c048715c3 100644 --- a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; @@ -11,7 +10,6 @@ using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -39,24 +37,17 @@ namespace MediaBrowser.Providers.Movies private readonly IJsonSerializer _jsonSerializer; /// <summary> - /// The _HTTP client - /// </summary> - private readonly IHttpClient _httpClient; - - /// <summary> /// Initializes a new instance of the <see cref="MovieDbImagesProvider"/> class. /// </summary> /// <param name="logManager">The log manager.</param> /// <param name="configurationManager">The configuration manager.</param> /// <param name="providerManager">The provider manager.</param> /// <param name="jsonSerializer">The json serializer.</param> - /// <param name="httpClient">The HTTP client.</param> - public MovieDbImagesProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager, IJsonSerializer jsonSerializer, IHttpClient httpClient) + public MovieDbImagesProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager, IJsonSerializer jsonSerializer) : base(logManager, configurationManager) { _providerManager = providerManager; _jsonSerializer = jsonSerializer; - _httpClient = httpClient; } /// <summary> diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs index e32bf2360..50a5ac8ed 100644 --- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs @@ -69,7 +69,9 @@ namespace MediaBrowser.Providers.Music protected override async Task FetchLastfmData(BaseItem item, string id, CancellationToken cancellationToken) { - var result = await GetAlbumResult(item, cancellationToken).ConfigureAwait(false); + var album = (MusicAlbum)item; + + var result = await GetAlbumResult(album, cancellationToken).ConfigureAwait(false); if (result != null && result.album != null) { @@ -83,15 +85,35 @@ namespace MediaBrowser.Providers.Music item.ProviderData[Id] = data; } - data.FileStamp = GetComparisonData(item as MusicAlbum); + data.FileStamp = GetComparisonData(album); } - private async Task<LastfmGetAlbumResult> GetAlbumResult(BaseItem item, CancellationToken cancellationToken) + private async Task<LastfmGetAlbumResult> GetAlbumResult(MusicAlbum item, CancellationToken cancellationToken) { - var folder = (Folder)item; + // Try album release Id + if (!string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Musicbrainz))) + { + var result = await GetAlbumResult(item.GetProviderId(MetadataProviders.Musicbrainz), cancellationToken).ConfigureAwait(false); + + if (result != null && result.album != null) + { + return result; + } + } + // Try album release group Id + if (!string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup))) + { + var result = await GetAlbumResult(item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup), cancellationToken).ConfigureAwait(false); + + if (result != null && result.album != null) + { + return result; + } + } + // Get each song, distinct by the combination of AlbumArtist and Album - var songs = folder.RecursiveChildren.OfType<Audio>().DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList(); + var songs = item.RecursiveChildren.OfType<Audio>().DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList(); foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist))) { @@ -124,6 +146,24 @@ namespace MediaBrowser.Providers.Music return JsonSerializer.DeserializeFromStream<LastfmGetAlbumResult>(json); } } + + private async Task<LastfmGetAlbumResult> GetAlbumResult(string musicbraizId, CancellationToken cancellationToken) + { + // Get albu info using artist and album name + var url = RootUrl + string.Format("method=album.getInfo&mbid={0}&api_key={1}&format=json", musicbraizId, ApiKey); + + using (var json = await HttpClient.Get(new HttpRequestOptions + { + Url = url, + ResourcePool = LastfmResourcePool, + CancellationToken = cancellationToken, + EnableHttpCompression = false + + }).ConfigureAwait(false)) + { + return JsonSerializer.DeserializeFromStream<LastfmGetAlbumResult>(json); + } + } protected override Task FetchData(BaseItem item, CancellationToken cancellationToken) { diff --git a/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs b/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs index 4999a845d..2104e449a 100644 --- a/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs +++ b/MediaBrowser.Providers/TV/FanArtSeasonProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; diff --git a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs index 776cede8e..2ac201a56 100644 --- a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; diff --git a/MediaBrowser.Controller/Dto/DtoBuilder.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index cc14a9e02..66e3613f5 100644 --- a/MediaBrowser.Controller/Dto/DtoBuilder.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1,47 +1,45 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; +using MediaBrowser.Controller.Session; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; +using MediaBrowser.Model.Session; +using MoreLinq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using MoreLinq; -namespace MediaBrowser.Controller.Dto +namespace MediaBrowser.Server.Implementations.Dto { - /// <summary> - /// Generates DTO's from domain entities - /// </summary> - public class DtoBuilder + public class DtoService : IDtoService { - /// <summary> - /// The index folder delimeter - /// </summary> - const string IndexFolderDelimeter = "-index-"; - private readonly ILogger _logger; private readonly ILibraryManager _libraryManager; + private readonly IUserManager _userManager; private readonly IUserDataRepository _userDataRepository; private readonly IItemRepository _itemRepo; - public DtoBuilder(ILogger logger, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) + public DtoService(ILogger logger, ILibraryManager libraryManager, IUserManager userManager, IUserDataRepository userDataRepository, IItemRepository itemRepo) { _logger = logger; _libraryManager = libraryManager; + _userManager = userManager; _userDataRepository = userDataRepository; _itemRepo = itemRepo; - } - + } + /// <summary> /// Converts a BaseItem to a DTOBaseItem /// </summary> @@ -81,7 +79,7 @@ namespace MediaBrowser.Controller.Dto { try { - await AttachPrimaryImageAspectRatio(dto, item, _logger).ConfigureAwait(false); + await AttachPrimaryImageAspectRatio(dto, item).ConfigureAwait(false); } catch (Exception ex) { @@ -140,7 +138,7 @@ namespace MediaBrowser.Controller.Dto dto.ChildCount = folder.GetChildren(user, true).Count(); } - SetSpecialCounts(folder, user, dto, _userDataRepository); + SetSpecialCounts(folder, user, dto); } } @@ -154,75 +152,526 @@ namespace MediaBrowser.Controller.Dto } } + public async Task<UserDto> GetUserDto(User user) + { + if (user == null) + { + throw new ArgumentNullException("user"); + } + + var dto = new UserDto + { + Id = user.Id.ToString("N"), + Name = user.Name, + HasPassword = !String.IsNullOrEmpty(user.Password), + LastActivityDate = user.LastActivityDate, + LastLoginDate = user.LastLoginDate, + Configuration = user.Configuration + }; + + var image = user.PrimaryImagePath; + + if (!string.IsNullOrEmpty(image)) + { + dto.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(user, ImageType.Primary, image); + + try + { + await AttachPrimaryImageAspectRatio(dto, user).ConfigureAwait(false); + } + catch (Exception ex) + { + // Have to use a catch-all unfortunately because some .net image methods throw plain Exceptions + _logger.ErrorException("Error generating PrimaryImageAspectRatio for {0}", ex, user.Name); + } + } + + return dto; + } + + public SessionInfoDto GetSessionInfoDto(SessionInfo session) + { + var dto = new SessionInfoDto + { + Client = session.Client, + DeviceId = session.DeviceId, + DeviceName = session.DeviceName, + Id = session.Id.ToString("N"), + LastActivityDate = session.LastActivityDate, + NowPlayingPositionTicks = session.NowPlayingPositionTicks, + SupportsRemoteControl = session.SupportsRemoteControl, + IsPaused = session.IsPaused, + IsMuted = session.IsMuted, + NowViewingContext = session.NowViewingContext, + NowViewingItemId = session.NowViewingItemId, + NowViewingItemName = session.NowViewingItemName, + NowViewingItemType = session.NowViewingItemType, + ApplicationVersion = session.ApplicationVersion + }; + + if (session.NowPlayingItem != null) + { + dto.NowPlayingItem = GetBaseItemInfo(session.NowPlayingItem); + } + + if (session.User != null) + { + dto.UserId = session.User.Id.ToString("N"); + dto.UserName = session.User.Name; + } + + return dto; + } + /// <summary> - /// Attaches the primary image aspect ratio. + /// Converts a BaseItem to a BaseItemInfo /// </summary> - /// <param name="dto">The dto.</param> /// <param name="item">The item.</param> - /// <param name="logger">The _logger.</param> - /// <returns>Task.</returns> - internal static async Task AttachPrimaryImageAspectRatio(IItemDto dto, BaseItem item, ILogger logger) + /// <returns>BaseItemInfo.</returns> + /// <exception cref="System.ArgumentNullException">item</exception> + public BaseItemInfo GetBaseItemInfo(BaseItem item) { - var path = item.PrimaryImagePath; + if (item == null) + { + throw new ArgumentNullException("item"); + } - if (string.IsNullOrEmpty(path)) + var info = new BaseItemInfo { - return; + Id = GetDtoId(item), + Name = item.Name, + MediaType = item.MediaType, + Type = item.GetType().Name, + IsFolder = item.IsFolder, + RunTimeTicks = item.RunTimeTicks + }; + + var imagePath = item.PrimaryImagePath; + + if (!string.IsNullOrEmpty(imagePath)) + { + try + { + info.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(item, ImageType.Primary, imagePath); + } + catch (IOException) + { + } } - var metaFileEntry = item.ResolveArgs.GetMetaFileByPath(path); + return info; + } - // See if we can avoid a file system lookup by looking for the file in ResolveArgs - var dateModified = metaFileEntry == null ? File.GetLastWriteTimeUtc(path) : metaFileEntry.LastWriteTimeUtc; + const string IndexFolderDelimeter = "-index-"; - ImageSize size; + /// <summary> + /// Gets client-side Id of a server-side BaseItem + /// </summary> + /// <param name="item">The item.</param> + /// <returns>System.String.</returns> + /// <exception cref="System.ArgumentNullException">item</exception> + public string GetDtoId(BaseItem item) + { + if (item == null) + { + throw new ArgumentNullException("item"); + } + + var indexFolder = item as IndexFolder; + + if (indexFolder != null) + { + return GetDtoId(indexFolder.Parent) + IndexFolderDelimeter + (indexFolder.IndexName ?? string.Empty) + IndexFolderDelimeter + indexFolder.Id; + } + + return item.Id.ToString("N"); + } + /// <summary> + /// Converts a UserItemData to a DTOUserItemData + /// </summary> + /// <param name="data">The data.</param> + /// <returns>DtoUserItemData.</returns> + /// <exception cref="System.ArgumentNullException"></exception> + public UserItemDataDto GetUserItemDataDto(UserItemData data) + { + if (data == null) + { + throw new ArgumentNullException("data"); + } + + return new UserItemDataDto + { + IsFavorite = data.IsFavorite, + Likes = data.Likes, + PlaybackPositionTicks = data.PlaybackPositionTicks, + PlayCount = data.PlayCount, + Rating = data.Rating, + Played = data.Played, + LastPlayedDate = data.LastPlayedDate + }; + } + private void SetBookProperties(BaseItemDto dto, Book item) + { + dto.SeriesName = item.SeriesName; + } + + private void SetMusicVideoProperties(BaseItemDto dto, MusicVideo item) + { + if (!string.IsNullOrEmpty(item.Album)) + { + var parentAlbum = _libraryManager.RootFolder + .RecursiveChildren + .OfType<MusicAlbum>() + .FirstOrDefault(i => string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase)); + + if (parentAlbum != null) + { + dto.AlbumId = GetDtoId(parentAlbum); + } + } + + dto.Album = item.Album; + dto.Artists = string.IsNullOrEmpty(item.Artist) ? new string[] { } : new[] { item.Artist }; + } + + private void SetGameProperties(BaseItemDto dto, Game item) + { + dto.Players = item.PlayersSupported; + dto.GameSystem = item.GameSystem; + } + + /// <summary> + /// Gets the backdrop image tags. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>List{System.String}.</returns> + private List<Guid> GetBackdropImageTags(BaseItem item) + { + return item.BackdropImagePaths + .Select(p => GetImageCacheTag(item, ImageType.Backdrop, p)) + .Where(i => i.HasValue) + .Select(i => i.Value) + .ToList(); + } + + /// <summary> + /// Gets the screenshot image tags. + /// </summary> + /// <param name="item">The item.</param> + /// <returns>List{Guid}.</returns> + private List<Guid> GetScreenshotImageTags(BaseItem item) + { + return item.ScreenshotImagePaths + .Select(p => GetImageCacheTag(item, ImageType.Screenshot, p)) + .Where(i => i.HasValue) + .Select(i => i.Value) + .ToList(); + } + + private Guid? GetImageCacheTag(BaseItem item, ImageType type, string path) + { try { - size = await Kernel.Instance.ImageManager.GetImageSize(path, dateModified).ConfigureAwait(false); + return Kernel.Instance.ImageManager.GetImageCacheTag(item, type, path); } - catch (FileNotFoundException) + catch (IOException ex) { - logger.Error("Image file does not exist: {0}", path); - return; + _logger.ErrorException("Error getting {0} image info for {1}", ex, type, path); + return null; } - catch (Exception ex) + } /// <summary> + /// Attaches People DTO's to a DTOBaseItem + /// </summary> + /// <param name="dto">The dto.</param> + /// <param name="item">The item.</param> + /// <returns>Task.</returns> + private async Task AttachPeople(BaseItemDto dto, BaseItem item) + { + // Ordering by person type to ensure actors and artists are at the front. + // This is taking advantage of the fact that they both begin with A + // This should be improved in the future + var people = item.People.OrderBy(i => i.Type).ToList(); + + // Attach People by transforming them into BaseItemPerson (DTO) + dto.People = new BaseItemPerson[people.Count]; + + var entities = await Task.WhenAll(people.Select(p => p.Name) + .Distinct(StringComparer.OrdinalIgnoreCase).Select(c => + Task.Run(async () => + { + try + { + return await _libraryManager.GetPerson(c).ConfigureAwait(false); + } + catch (IOException ex) + { + _logger.ErrorException("Error getting person {0}", ex, c); + return null; + } + }) + + )).ConfigureAwait(false); + + var dictionary = entities.Where(i => i != null) + .DistinctBy(i => i.Name) + .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); + + for (var i = 0; i < people.Count; i++) { - logger.ErrorException("Failed to determine primary image aspect ratio for {0}", ex, path); - return; + var person = people[i]; + + var baseItemPerson = new BaseItemPerson + { + Name = person.Name, + Role = person.Role, + Type = person.Type + }; + + Person entity; + + if (dictionary.TryGetValue(person.Name, out entity)) + { + var primaryImagePath = entity.PrimaryImagePath; + + if (!string.IsNullOrEmpty(primaryImagePath)) + { + baseItemPerson.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); + } + } + + dto.People[i] = baseItemPerson; } + } - dto.OriginalPrimaryImageAspectRatio = size.Width / size.Height; + /// <summary> + /// Attaches the studios. + /// </summary> + /// <param name="dto">The dto.</param> + /// <param name="item">The item.</param> + /// <returns>Task.</returns> + private async Task AttachStudios(BaseItemDto dto, BaseItem item) + { + var studios = item.Studios.ToList(); - var supportedEnhancers = Kernel.Instance.ImageManager.ImageEnhancers.Where(i => + dto.Studios = new StudioDto[studios.Count]; + + var entities = await Task.WhenAll(studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(c => + + Task.Run(async () => + { + try + { + return await _libraryManager.GetStudio(c).ConfigureAwait(false); + } + catch (IOException ex) + { + _logger.ErrorException("Error getting studio {0}", ex, c); + return null; + } + }) + + )).ConfigureAwait(false); + + var dictionary = entities + .Where(i => i != null) + .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); + + for (var i = 0; i < studios.Count; i++) { - try + var studio = studios[i]; + + var studioDto = new StudioDto { - return i.Supports(item, ImageType.Primary); + Name = studio + }; + + Studio entity; + + if (dictionary.TryGetValue(studio, out entity)) + { + var primaryImagePath = entity.PrimaryImagePath; + + if (!string.IsNullOrEmpty(primaryImagePath)) + { + studioDto.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); + } } - catch (Exception ex) + + dto.Studios[i] = studioDto; + } + } + + /// <summary> + /// If an item does not any backdrops, this can be used to find the first parent that does have one + /// </summary> + /// <param name="item">The item.</param> + /// <param name="owner">The owner.</param> + /// <returns>BaseItem.</returns> + private BaseItem GetParentBackdropItem(BaseItem item, BaseItem owner) + { + var parent = item.Parent ?? owner; + + while (parent != null) + { + if (parent.BackdropImagePaths != null && parent.BackdropImagePaths.Count > 0) { - logger.ErrorException("Error in image enhancer: {0}", ex, i.GetType().Name); + return parent; + } - return false; + parent = parent.Parent; + } + + return null; + } + + /// <summary> + /// If an item does not have a logo, this can be used to find the first parent that does have one + /// </summary> + /// <param name="item">The item.</param> + /// <param name="type">The type.</param> + /// <param name="owner">The owner.</param> + /// <returns>BaseItem.</returns> + private BaseItem GetParentImageItem(BaseItem item, ImageType type, BaseItem owner) + { + var parent = item.Parent ?? owner; + + while (parent != null) + { + if (parent.HasImage(type)) + { + return parent; } - }).ToList(); + parent = parent.Parent; + } + return null; + } - foreach (var enhancer in supportedEnhancers) + /// <summary> + /// Gets the chapter info dto. + /// </summary> + /// <param name="chapterInfo">The chapter info.</param> + /// <param name="item">The item.</param> + /// <returns>ChapterInfoDto.</returns> + private ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item) + { + var dto = new ChapterInfoDto { - try + Name = chapterInfo.Name, + StartPositionTicks = chapterInfo.StartPositionTicks + }; + + if (!string.IsNullOrEmpty(chapterInfo.ImagePath)) + { + dto.ImageTag = GetImageCacheTag(item, ImageType.Chapter, chapterInfo.ImagePath); + } + + return dto; + } + + + /// <summary> + /// Gets a BaseItem based upon it's client-side item id + /// </summary> + /// <param name="id">The id.</param> + /// <param name="userId">The user id.</param> + /// <returns>BaseItem.</returns> + public BaseItem GetItemByDtoId(string id, Guid? userId = null) + { + if (string.IsNullOrEmpty(id)) + { + throw new ArgumentNullException("id"); + } + + // If the item is an indexed folder we have to do a special routine to get it + var isIndexFolder = id.IndexOf(IndexFolderDelimeter, StringComparison.OrdinalIgnoreCase) != -1; + + if (isIndexFolder) + { + if (userId.HasValue) { - size = enhancer.GetEnhancedImageSize(item, ImageType.Primary, 0, size); + return GetIndexFolder(id, userId.Value); } - catch (Exception ex) + } + + BaseItem item = null; + + if (userId.HasValue || !isIndexFolder) + { + item = _libraryManager.GetItemById(new Guid(id)); + } + + // If we still don't find it, look within individual user views + if (item == null && !userId.HasValue && isIndexFolder) + { + foreach (var user in _userManager.Users) { - logger.ErrorException("Error in image enhancer: {0}", ex, enhancer.GetType().Name); + item = GetItemByDtoId(id, user.Id); + + if (item != null) + { + break; + } } } - dto.PrimaryImageAspectRatio = size.Width / size.Height; + return item; + } + + /// <summary> + /// Finds an index folder based on an Id and userId + /// </summary> + /// <param name="id">The id.</param> + /// <param name="userId">The user id.</param> + /// <returns>BaseItem.</returns> + private BaseItem GetIndexFolder(string id, Guid userId) + { + var user = _userManager.GetUserById(userId); + + var stringSeparators = new[] { IndexFolderDelimeter }; + + // Split using the delimeter + var values = id.Split(stringSeparators, StringSplitOptions.None).ToList(); + + // Get the top folder normally using the first id + var folder = GetItemByDtoId(values[0], userId) as Folder; + + values.RemoveAt(0); + + // Get indexed folders using the remaining values in the id string + return GetIndexFolder(values, folder, user); + } + + /// <summary> + /// Gets indexed folders based on a list of index names and folder id's + /// </summary> + /// <param name="values">The values.</param> + /// <param name="parentFolder">The parent folder.</param> + /// <param name="user">The user.</param> + /// <returns>BaseItem.</returns> + private BaseItem GetIndexFolder(List<string> values, Folder parentFolder, User user) + { + // The index name is first + var indexBy = values[0]; + + // The index folder id is next + var indexFolderId = new Guid(values[1]); + + // Remove them from the lst + values.RemoveRange(0, 2); + + // Get the IndexFolder + var indexFolder = parentFolder.GetChildren(user, false, indexBy).FirstOrDefault(i => i.Id == indexFolderId) as Folder; + + // Nested index folder + if (values.Count > 0) + { + return GetIndexFolder(values, indexFolder, user); + } + + return indexFolder; } /// <summary> @@ -303,7 +752,7 @@ namespace MediaBrowser.Controller.Dto } } - dto.Id = GetClientItemId(item); + dto.Id = GetDtoId(item); dto.IndexNumber = item.IndexNumber; dto.IsFolder = item.IsFolder; dto.Language = item.Language; @@ -352,14 +801,14 @@ namespace MediaBrowser.Controller.Dto if (parentWithBackdrop != null) { - dto.ParentBackdropItemId = GetClientItemId(parentWithBackdrop); + dto.ParentBackdropItemId = GetDtoId(parentWithBackdrop); dto.ParentBackdropImageTags = GetBackdropImageTags(parentWithBackdrop); } } if (item.Parent != null && fields.Contains(ItemFields.ParentId)) { - dto.ParentId = GetClientItemId(item.Parent); + dto.ParentId = GetDtoId(item.Parent); } dto.ParentIndexNumber = item.ParentIndexNumber; @@ -371,7 +820,7 @@ namespace MediaBrowser.Controller.Dto if (parentWithLogo != null) { - dto.ParentLogoItemId = GetClientItemId(parentWithLogo); + dto.ParentLogoItemId = GetDtoId(parentWithLogo); dto.ParentLogoImageTag = GetImageCacheTag(parentWithLogo, ImageType.Logo, parentWithLogo.GetImage(ImageType.Logo)); } @@ -384,7 +833,7 @@ namespace MediaBrowser.Controller.Dto if (parentWithImage != null) { - dto.ParentArtItemId = GetClientItemId(parentWithImage); + dto.ParentArtItemId = GetDtoId(parentWithImage); dto.ParentArtImageTag = GetImageCacheTag(parentWithImage, ImageType.Art, parentWithImage.GetImage(ImageType.Art)); } @@ -450,7 +899,7 @@ namespace MediaBrowser.Controller.Dto if (albumParent != null) { - dto.AlbumId = GetClientItemId(albumParent); + dto.AlbumId = GetDtoId(albumParent); var imagePath = albumParent.PrimaryImagePath; @@ -543,7 +992,7 @@ namespace MediaBrowser.Controller.Dto { series = item.FindParent<Series>(); - dto.SeriesId = GetClientItemId(series); + dto.SeriesId = GetDtoId(series); dto.SeriesName = series.Name; } @@ -554,7 +1003,7 @@ namespace MediaBrowser.Controller.Dto { series = item.FindParent<Series>(); - dto.SeriesId = GetClientItemId(series); + dto.SeriesId = GetDtoId(series); dto.SeriesName = series.Name; } @@ -580,45 +1029,14 @@ namespace MediaBrowser.Controller.Dto } } - private void SetBookProperties(BaseItemDto dto, Book item) - { - dto.SeriesName = item.SeriesName; - } - - private void SetMusicVideoProperties(BaseItemDto dto, MusicVideo item) - { - if (!string.IsNullOrEmpty(item.Album)) - { - var parentAlbum = _libraryManager.RootFolder - .RecursiveChildren - .OfType<MusicAlbum>() - .FirstOrDefault(i => string.Equals(i.Name, item.Album, StringComparison.OrdinalIgnoreCase)); - - if (parentAlbum != null) - { - dto.AlbumId = GetClientItemId(parentAlbum); - } - } - - dto.Album = item.Album; - dto.Artists = string.IsNullOrEmpty(item.Artist) ? new string[] { } : new[] { item.Artist }; - } - - private void SetGameProperties(BaseItemDto dto, Game item) - { - dto.Players = item.PlayersSupported; - dto.GameSystem = item.GameSystem; - } - /// <summary> /// Since it can be slow to make all of these calculations independently, this method will provide a way to do them all at once /// </summary> /// <param name="folder">The folder.</param> /// <param name="user">The user.</param> /// <param name="dto">The dto.</param> - /// <param name="userDataRepository">The user data repository.</param> /// <returns>Task.</returns> - private static void SetSpecialCounts(Folder folder, User user, BaseItemDto dto, IUserDataRepository userDataRepository) + private void SetSpecialCounts(Folder folder, User user, BaseItemDto dto) { var rcentlyAddedItemCount = 0; var recursiveItemCount = 0; @@ -630,7 +1048,7 @@ namespace MediaBrowser.Controller.Dto // Loop through each recursive child foreach (var child in folder.GetRecursiveChildren(user, true).Where(i => !i.IsFolder).ToList()) { - var userdata = userDataRepository.GetUserData(user.Id, child.GetUserDataKey()); + var userdata = _userDataRepository.GetUserData(user.Id, child.GetUserDataKey()); recursiveItemCount++; @@ -683,428 +1101,75 @@ namespace MediaBrowser.Controller.Dto } /// <summary> - /// Attaches People DTO's to a DTOBaseItem - /// </summary> - /// <param name="dto">The dto.</param> - /// <param name="item">The item.</param> - /// <returns>Task.</returns> - private async Task AttachPeople(BaseItemDto dto, BaseItem item) - { - // Ordering by person type to ensure actors and artists are at the front. - // This is taking advantage of the fact that they both begin with A - // This should be improved in the future - var people = item.People.OrderBy(i => i.Type).ToList(); - - // Attach People by transforming them into BaseItemPerson (DTO) - dto.People = new BaseItemPerson[people.Count]; - - var entities = await Task.WhenAll(people.Select(p => p.Name) - .Distinct(StringComparer.OrdinalIgnoreCase).Select(c => - Task.Run(async () => - { - try - { - return await _libraryManager.GetPerson(c).ConfigureAwait(false); - } - catch (IOException ex) - { - _logger.ErrorException("Error getting person {0}", ex, c); - return null; - } - }) - - )).ConfigureAwait(false); - - var dictionary = entities.Where(i => i != null) - .DistinctBy(i => i.Name) - .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); - - for (var i = 0; i < people.Count; i++) - { - var person = people[i]; - - var baseItemPerson = new BaseItemPerson - { - Name = person.Name, - Role = person.Role, - Type = person.Type - }; - - Person entity; - - if (dictionary.TryGetValue(person.Name, out entity)) - { - var primaryImagePath = entity.PrimaryImagePath; - - if (!string.IsNullOrEmpty(primaryImagePath)) - { - baseItemPerson.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); - } - } - - dto.People[i] = baseItemPerson; - } - } - - /// <summary> - /// Attaches the studios. + /// Attaches the primary image aspect ratio. /// </summary> /// <param name="dto">The dto.</param> /// <param name="item">The item.</param> + /// <param name="logger">The _logger.</param> /// <returns>Task.</returns> - private async Task AttachStudios(BaseItemDto dto, BaseItem item) + private async Task AttachPrimaryImageAspectRatio(IItemDto dto, BaseItem item) { - var studios = item.Studios.ToList(); - - dto.Studios = new StudioDto[studios.Count]; - - var entities = await Task.WhenAll(studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(c => - - Task.Run(async () => - { - try - { - return await _libraryManager.GetStudio(c).ConfigureAwait(false); - } - catch (IOException ex) - { - _logger.ErrorException("Error getting studio {0}", ex, c); - return null; - } - }) - - )).ConfigureAwait(false); - - var dictionary = entities - .Where(i => i != null) - .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase); - - for (var i = 0; i < studios.Count; i++) - { - var studio = studios[i]; - - var studioDto = new StudioDto - { - Name = studio - }; - - Studio entity; - - if (dictionary.TryGetValue(studio, out entity)) - { - var primaryImagePath = entity.PrimaryImagePath; - - if (!string.IsNullOrEmpty(primaryImagePath)) - { - studioDto.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary, primaryImagePath); - } - } - - dto.Studios[i] = studioDto; - } - } - - /// <summary> - /// If an item does not any backdrops, this can be used to find the first parent that does have one - /// </summary> - /// <param name="item">The item.</param> - /// <param name="owner">The owner.</param> - /// <returns>BaseItem.</returns> - private BaseItem GetParentBackdropItem(BaseItem item, BaseItem owner) - { - var parent = item.Parent ?? owner; + var path = item.PrimaryImagePath; - while (parent != null) + if (string.IsNullOrEmpty(path)) { - if (parent.BackdropImagePaths != null && parent.BackdropImagePaths.Count > 0) - { - return parent; - } - - parent = parent.Parent; + return; } - return null; - } - - /// <summary> - /// If an item does not have a logo, this can be used to find the first parent that does have one - /// </summary> - /// <param name="item">The item.</param> - /// <param name="type">The type.</param> - /// <param name="owner">The owner.</param> - /// <returns>BaseItem.</returns> - private BaseItem GetParentImageItem(BaseItem item, ImageType type, BaseItem owner) - { - var parent = item.Parent ?? owner; - - while (parent != null) - { - if (parent.HasImage(type)) - { - return parent; - } + var metaFileEntry = item.ResolveArgs.GetMetaFileByPath(path); - parent = parent.Parent; - } + // See if we can avoid a file system lookup by looking for the file in ResolveArgs + var dateModified = metaFileEntry == null ? File.GetLastWriteTimeUtc(path) : metaFileEntry.LastWriteTimeUtc; - return null; - } + ImageSize size; - /// <summary> - /// Converts a UserItemData to a DTOUserItemData - /// </summary> - /// <param name="data">The data.</param> - /// <returns>DtoUserItemData.</returns> - /// <exception cref="System.ArgumentNullException"></exception> - public static UserItemDataDto GetUserItemDataDto(UserItemData data) - { - if (data == null) + try { - throw new ArgumentNullException("data"); + size = await Kernel.Instance.ImageManager.GetImageSize(path, dateModified).ConfigureAwait(false); } - - return new UserItemDataDto - { - IsFavorite = data.IsFavorite, - Likes = data.Likes, - PlaybackPositionTicks = data.PlaybackPositionTicks, - PlayCount = data.PlayCount, - Rating = data.Rating, - Played = data.Played, - LastPlayedDate = data.LastPlayedDate - }; - } - - /// <summary> - /// Gets the chapter info dto. - /// </summary> - /// <param name="chapterInfo">The chapter info.</param> - /// <param name="item">The item.</param> - /// <returns>ChapterInfoDto.</returns> - private ChapterInfoDto GetChapterInfoDto(ChapterInfo chapterInfo, BaseItem item) - { - var dto = new ChapterInfoDto - { - Name = chapterInfo.Name, - StartPositionTicks = chapterInfo.StartPositionTicks - }; - - if (!string.IsNullOrEmpty(chapterInfo.ImagePath)) + catch (FileNotFoundException) { - dto.ImageTag = GetImageCacheTag(item, ImageType.Chapter, chapterInfo.ImagePath); + _logger.Error("Image file does not exist: {0}", path); + return; } - - return dto; - } - - /// <summary> - /// Converts a BaseItem to a BaseItemInfo - /// </summary> - /// <param name="item">The item.</param> - /// <returns>BaseItemInfo.</returns> - /// <exception cref="System.ArgumentNullException">item</exception> - public static BaseItemInfo GetBaseItemInfo(BaseItem item) - { - if (item == null) + catch (Exception ex) { - throw new ArgumentNullException("item"); + _logger.ErrorException("Failed to determine primary image aspect ratio for {0}", ex, path); + return; } - var info = new BaseItemInfo - { - Id = GetClientItemId(item), - Name = item.Name, - MediaType = item.MediaType, - Type = item.GetType().Name, - IsFolder = item.IsFolder, - RunTimeTicks = item.RunTimeTicks - }; - - var imagePath = item.PrimaryImagePath; + dto.OriginalPrimaryImageAspectRatio = size.Width / size.Height; - if (!string.IsNullOrEmpty(imagePath)) + var supportedEnhancers = Kernel.Instance.ImageManager.ImageEnhancers.Where(i => { try { - info.PrimaryImageTag = Kernel.Instance.ImageManager.GetImageCacheTag(item, ImageType.Primary, imagePath); + return i.Supports(item, ImageType.Primary); } - catch (IOException) + catch (Exception ex) { - } - } - - return info; - } - - /// <summary> - /// Gets client-side Id of a server-side BaseItem - /// </summary> - /// <param name="item">The item.</param> - /// <returns>System.String.</returns> - /// <exception cref="System.ArgumentNullException">item</exception> - public static string GetClientItemId(BaseItem item) - { - if (item == null) - { - throw new ArgumentNullException("item"); - } + _logger.ErrorException("Error in image enhancer: {0}", ex, i.GetType().Name); - var indexFolder = item as IndexFolder; - - if (indexFolder != null) - { - return GetClientItemId(indexFolder.Parent) + IndexFolderDelimeter + (indexFolder.IndexName ?? string.Empty) + IndexFolderDelimeter + indexFolder.Id; - } - - return item.Id.ToString("N"); - } + return false; + } - /// <summary> - /// Gets a BaseItem based upon it's client-side item id - /// </summary> - /// <param name="id">The id.</param> - /// <param name="userManager">The user manager.</param> - /// <param name="libraryManager">The library manager.</param> - /// <param name="userId">The user id.</param> - /// <returns>BaseItem.</returns> - public static BaseItem GetItemByClientId(string id, IUserManager userManager, ILibraryManager libraryManager, Guid? userId = null) - { - if (string.IsNullOrEmpty(id)) - { - throw new ArgumentNullException("id"); - } + }).ToList(); - // If the item is an indexed folder we have to do a special routine to get it - var isIndexFolder = id.IndexOf(IndexFolderDelimeter, StringComparison.OrdinalIgnoreCase) != -1; - if (isIndexFolder) + foreach (var enhancer in supportedEnhancers) { - if (userId.HasValue) + try { - return GetIndexFolder(id, userId.Value, userManager, libraryManager); + size = enhancer.GetEnhancedImageSize(item, ImageType.Primary, 0, size); } - } - - BaseItem item = null; - - if (userId.HasValue || !isIndexFolder) - { - item = libraryManager.GetItemById(new Guid(id)); - } - - // If we still don't find it, look within individual user views - if (item == null && !userId.HasValue && isIndexFolder) - { - foreach (var user in userManager.Users) + catch (Exception ex) { - item = GetItemByClientId(id, userManager, libraryManager, user.Id); - - if (item != null) - { - break; - } + _logger.ErrorException("Error in image enhancer: {0}", ex, enhancer.GetType().Name); } } - return item; - } - - /// <summary> - /// Finds an index folder based on an Id and userId - /// </summary> - /// <param name="id">The id.</param> - /// <param name="userId">The user id.</param> - /// <param name="userManager">The user manager.</param> - /// <param name="libraryManager">The library manager.</param> - /// <returns>BaseItem.</returns> - private static BaseItem GetIndexFolder(string id, Guid userId, IUserManager userManager, ILibraryManager libraryManager) - { - var user = userManager.GetUserById(userId); - - var stringSeparators = new[] { IndexFolderDelimeter }; - - // Split using the delimeter - var values = id.Split(stringSeparators, StringSplitOptions.None).ToList(); - - // Get the top folder normally using the first id - var folder = GetItemByClientId(values[0], userManager, libraryManager, userId) as Folder; - - values.RemoveAt(0); - - // Get indexed folders using the remaining values in the id string - return GetIndexFolder(values, folder, user); - } - - /// <summary> - /// Gets indexed folders based on a list of index names and folder id's - /// </summary> - /// <param name="values">The values.</param> - /// <param name="parentFolder">The parent folder.</param> - /// <param name="user">The user.</param> - /// <returns>BaseItem.</returns> - private static BaseItem GetIndexFolder(List<string> values, Folder parentFolder, User user) - { - // The index name is first - var indexBy = values[0]; - - // The index folder id is next - var indexFolderId = new Guid(values[1]); - - // Remove them from the lst - values.RemoveRange(0, 2); - - // Get the IndexFolder - var indexFolder = parentFolder.GetChildren(user, false, indexBy).FirstOrDefault(i => i.Id == indexFolderId) as Folder; - - // Nested index folder - if (values.Count > 0) - { - return GetIndexFolder(values, indexFolder, user); - } - - return indexFolder; - } - - /// <summary> - /// Gets the backdrop image tags. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>List{System.String}.</returns> - private List<Guid> GetBackdropImageTags(BaseItem item) - { - return item.BackdropImagePaths - .Select(p => GetImageCacheTag(item, ImageType.Backdrop, p)) - .Where(i => i.HasValue) - .Select(i => i.Value) - .ToList(); - } - - /// <summary> - /// Gets the screenshot image tags. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>List{Guid}.</returns> - private List<Guid> GetScreenshotImageTags(BaseItem item) - { - return item.ScreenshotImagePaths - .Select(p => GetImageCacheTag(item, ImageType.Screenshot, p)) - .Where(i => i.HasValue) - .Select(i => i.Value) - .ToList(); + dto.PrimaryImageAspectRatio = size.Width / size.Height; } - private Guid? GetImageCacheTag(BaseItem item, ImageType type, string path) - { - try - { - return Kernel.Instance.ImageManager.GetImageCacheTag(item, type, path); - } - catch (IOException ex) - { - _logger.ErrorException("Error getting {0} image info for {1}", ex, type, path); - return null; - } - } } } diff --git a/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs b/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs index 6325944f1..43c1e53b3 100644 --- a/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs +++ b/MediaBrowser.Server.Implementations/EntryPoints/WebSocketEvents.cs @@ -8,9 +8,7 @@ using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; -using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; -using MediaBrowser.Model.Updates; using System; namespace MediaBrowser.Server.Implementations.EntryPoints @@ -24,10 +22,6 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// The _server manager /// </summary> private readonly IServerManager _serverManager; - /// <summary> - /// The _logger - /// </summary> - private readonly ILogger _logger; /// <summary> /// The _user manager @@ -49,20 +43,22 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// </summary> private readonly ITaskManager _taskManager; + private readonly IDtoService _dtoService; + /// <summary> /// Initializes a new instance of the <see cref="WebSocketEvents" /> class. /// </summary> /// <param name="serverManager">The server manager.</param> /// <param name="logger">The logger.</param> /// <param name="userManager">The user manager.</param> - public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, ILogger logger, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager) + public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, IUserManager userManager, IInstallationManager installationManager, ITaskManager taskManager, IDtoService dtoService) { _serverManager = serverManager; - _logger = logger; _userManager = userManager; _installationManager = installationManager; _appHost = appHost; _taskManager = taskManager; + _dtoService = dtoService; } public void Run() @@ -140,7 +136,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints /// <param name="e">The e.</param> async void userManager_UserUpdated(object sender, GenericEventArgs<User> e) { - var dto = await new UserDtoBuilder(_logger).GetUserDto(e.Argument).ConfigureAwait(false); + var dto = await _dtoService.GetUserDto(e.Argument).ConfigureAwait(false); _serverManager.SendWebSocketMessage("UserUpdated", dto); } diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 7f3bb674e..bdb4f28e4 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -251,14 +251,6 @@ namespace MediaBrowser.Server.Implementations.Library } /// <summary> - /// The _internet providers enabled - /// </summary> - private bool _internetProvidersEnabled; - /// <summary> - /// The _people image fetching enabled - /// </summary> - private bool _peopleImageFetchingEnabled; - /// <summary> /// The _items by name path /// </summary> private string _itemsByNamePath; @@ -275,8 +267,6 @@ namespace MediaBrowser.Server.Implementations.Library { _seasonZeroDisplayName = ConfigurationManager.Configuration.SeasonZeroDisplayName; _itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath; - _internetProvidersEnabled = configuration.EnableInternetProviders; - _peopleImageFetchingEnabled = configuration.InternetProviderExcludeTypes == null || !configuration.InternetProviderExcludeTypes.Contains(typeof(Person).Name, StringComparer.OrdinalIgnoreCase); } /// <summary> diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index a3647aefa..73682dfca 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -112,6 +112,7 @@ </Compile> <Compile Include="BdInfo\BdInfoExaminer.cs" /> <Compile Include="Configuration\ServerConfigurationManager.cs" /> + <Compile Include="Dto\DtoService.cs" /> <Compile Include="EntryPoints\LibraryChangedNotifier.cs" /> <Compile Include="EntryPoints\LoadRegistrations.cs" /> <Compile Include="EntryPoints\Notifications\Notifier.cs" /> diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs index a29dc1a63..c96ed970a 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -41,31 +40,20 @@ namespace MediaBrowser.Server.Implementations.Persistence private readonly IJsonSerializer _jsonSerializer; /// <summary> - /// The _app paths - /// </summary> - private readonly IApplicationPaths _appPaths; - - /// <summary> /// Initializes a new instance of the <see cref="SqliteUserRepository" /> class. /// </summary> /// <param name="connection">The connection.</param> - /// <param name="appPaths">The app paths.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logManager">The log manager.</param> /// <exception cref="System.ArgumentNullException">appPaths</exception> - public SqliteUserRepository(IDbConnection connection, IApplicationPaths appPaths, IJsonSerializer jsonSerializer, ILogManager logManager) + public SqliteUserRepository(IDbConnection connection, IJsonSerializer jsonSerializer, ILogManager logManager) { - if (appPaths == null) - { - throw new ArgumentNullException("appPaths"); - } if (jsonSerializer == null) { throw new ArgumentNullException("jsonSerializer"); } _connection = connection; - _appPaths = appPaths; _jsonSerializer = jsonSerializer; _logger = logManager.GetLogger(GetType().Name); diff --git a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs index 1cc19b02f..c579996d2 100644 --- a/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs +++ b/MediaBrowser.Server.Implementations/ScheduledTasks/ChapterImagesTask.cs @@ -5,7 +5,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Serialization; using MoreLinq; using System; using System.Collections.Generic; @@ -21,8 +20,6 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// </summary> class ChapterImagesTask : IScheduledTask { - private readonly IJsonSerializer _jsonSerializer; - /// <summary> /// The _kernel /// </summary> @@ -54,14 +51,12 @@ namespace MediaBrowser.Server.Implementations.ScheduledTasks /// <param name="kernel">The kernel.</param> /// <param name="logManager">The log manager.</param> /// <param name="libraryManager">The library manager.</param> - /// <param name="jsonSerializer">The json serializer.</param> /// <param name="itemRepo">The item repo.</param> - public ChapterImagesTask(Kernel kernel, ILogManager logManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer, IItemRepository itemRepo) + public ChapterImagesTask(Kernel kernel, ILogManager logManager, ILibraryManager libraryManager, IItemRepository itemRepo) { _kernel = kernel; _logger = logManager.GetLogger(GetType().Name); _libraryManager = libraryManager; - _jsonSerializer = jsonSerializer; _itemRepo = itemRepo; libraryManager.ItemAdded += libraryManager_ItemAdded; diff --git a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs index 893a6e49e..2a4361e61 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionWebSocketListener.cs @@ -1,13 +1,11 @@ -using System.Globalization; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Dto; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; using System; using System.Linq; using System.Threading.Tasks; -using MediaBrowser.Model.Net; namespace MediaBrowser.Server.Implementations.Session { @@ -31,22 +29,22 @@ namespace MediaBrowser.Server.Implementations.Session /// </summary> private readonly ILogger _logger; - private readonly IUserManager _userManager; - private readonly ILibraryManager _libraryManager; + /// <summary> + /// The _dto service + /// </summary> + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="SessionWebSocketListener" /> class. /// </summary> /// <param name="sessionManager">The session manager.</param> /// <param name="logManager">The log manager.</param> - /// <param name="libraryManager">The library manager.</param> - /// <param name="userManager">The user manager.</param> - public SessionWebSocketListener(ISessionManager sessionManager, ILogManager logManager, ILibraryManager libraryManager, IUserManager userManager) + /// <param name="dtoService">The dto service.</param> + public SessionWebSocketListener(ISessionManager sessionManager, ILogManager logManager, IDtoService dtoService) { _sessionManager = sessionManager; _logger = logManager.GetLogger(GetType().Name); - _libraryManager = libraryManager; - _userManager = userManager; + _dtoService = dtoService; } /// <summary> @@ -109,7 +107,7 @@ namespace MediaBrowser.Server.Implementations.Session if (session != null && session.User != null) { - var item = DtoBuilder.GetItemByClientId(message.Data, _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(message.Data); _sessionManager.OnPlaybackStart(item, session.Id); } @@ -122,7 +120,7 @@ namespace MediaBrowser.Server.Implementations.Session { var vals = message.Data.Split('|'); - var item = DtoBuilder.GetItemByClientId(vals[0], _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(vals[0]); long? positionTicks = null; @@ -152,7 +150,7 @@ namespace MediaBrowser.Server.Implementations.Session { var vals = message.Data.Split('|'); - var item = DtoBuilder.GetItemByClientId(vals[0], _userManager, _libraryManager); + var item = _dtoService.GetItemByDtoId(vals[0]); long? positionTicks = null; diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index b77c738c3..c92eec230 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -12,6 +12,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; @@ -32,6 +33,7 @@ using MediaBrowser.Providers; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations.BdInfo; using MediaBrowser.Server.Implementations.Configuration; +using MediaBrowser.Server.Implementations.Dto; using MediaBrowser.Server.Implementations.HttpServer; using MediaBrowser.Server.Implementations.IO; using MediaBrowser.Server.Implementations.Library; @@ -155,6 +157,7 @@ namespace MediaBrowser.ServerApplication /// </summary> /// <value>The HTTP server.</value> private IHttpServer HttpServer { get; set; } + private IDtoService DtoService { get; set; } /// <summary> /// Gets or sets the media encoder. @@ -290,6 +293,9 @@ namespace MediaBrowser.ServerApplication LocalizationManager = new LocalizationManager(ServerConfigurationManager); RegisterSingleInstance(LocalizationManager); + DtoService = new DtoService(Logger, LibraryManager, UserManager, UserDataRepository, ItemRepository); + RegisterSingleInstance(DtoService); + var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false)); var itemsTask = Task.Run(async () => await ConfigureItemRepositories().ConfigureAwait(false)); var userdataTask = Task.Run(async () => await ConfigureUserDataRepositories().ConfigureAwait(false)); @@ -309,7 +315,7 @@ namespace MediaBrowser.ServerApplication ServerKernel.ImageManager = new ImageManager(LogManager.GetLogger("ImageManager"), ApplicationPaths, ItemRepository); Parallel.Invoke( - () => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, LibraryManager, Logger, ItemRepository), + () => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, Logger, ItemRepository), () => ServerKernel.ImageManager.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(), () => LocalizedStrings.StringFiles = GetExports<LocalizedStringData>(), SetStaticProperties @@ -322,7 +328,7 @@ namespace MediaBrowser.ServerApplication var connection = await ConnectToDb(dbFile).ConfigureAwait(false); - var repo = new SqliteUserRepository(connection, ApplicationPaths, JsonSerializer, LogManager); + var repo = new SqliteUserRepository(connection, JsonSerializer, LogManager); repo.Initialize(); diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs index 4b19ceaf2..af0f9e3a0 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller; -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Session; using MediaBrowser.Model.Logging; using System.Threading.Tasks; @@ -31,6 +31,7 @@ namespace MediaBrowser.WebDashboard.Api private readonly ITaskManager _taskManager; private readonly ISessionManager _sessionManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class. @@ -39,12 +40,13 @@ namespace MediaBrowser.WebDashboard.Api /// <param name="logger">The logger.</param> /// <param name="taskManager">The task manager.</param> /// <param name="sessionManager">The session manager.</param> - public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, ISessionManager sessionManager) + public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, ISessionManager sessionManager, IDtoService dtoService) : base(logger) { _appHost = appHost; _taskManager = taskManager; _sessionManager = sessionManager; + _dtoService = dtoService; } /// <summary> @@ -54,7 +56,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>Task{IEnumerable{TaskInfo}}.</returns> protected override Task<DashboardInfo> GetDataToSend(object state) { - return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, _taskManager, _sessionManager)); + return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, _taskManager, _sessionManager, _dtoService)); } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index ceed8d6c7..df66d972e 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -117,6 +117,7 @@ namespace MediaBrowser.WebDashboard.Api private readonly IServerConfigurationManager _serverConfigurationManager; private readonly ISessionManager _sessionManager; + private readonly IDtoService _dtoService; /// <summary> /// Initializes a new instance of the <see cref="DashboardService" /> class. @@ -125,12 +126,13 @@ namespace MediaBrowser.WebDashboard.Api /// <param name="appHost">The app host.</param> /// <param name="serverConfigurationManager">The server configuration manager.</param> /// <param name="sessionManager">The session manager.</param> - public DashboardService(ITaskManager taskManager, IServerApplicationHost appHost, IServerConfigurationManager serverConfigurationManager, ISessionManager sessionManager) + public DashboardService(ITaskManager taskManager, IServerApplicationHost appHost, IServerConfigurationManager serverConfigurationManager, ISessionManager sessionManager, IDtoService dtoService) { _taskManager = taskManager; _appHost = appHost; _serverConfigurationManager = serverConfigurationManager; _sessionManager = sessionManager; + _dtoService = dtoService; } /// <summary> @@ -169,7 +171,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>System.Object.</returns> public object Get(GetDashboardInfo request) { - var result = GetDashboardInfo(_appHost, _taskManager, _sessionManager); + var result = GetDashboardInfo(_appHost, _taskManager, _sessionManager, _dtoService); return ResultFactory.GetOptimizedResult(RequestContext, result); } @@ -183,7 +185,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>DashboardInfo.</returns> public static DashboardInfo GetDashboardInfo(IServerApplicationHost appHost, ITaskManager taskManager, - ISessionManager connectionManager) + ISessionManager connectionManager, IDtoService dtoService) { var connections = connectionManager.Sessions.Where(i => i.IsActive).ToArray(); @@ -197,7 +199,7 @@ namespace MediaBrowser.WebDashboard.Api ApplicationUpdateTaskId = taskManager.ScheduledTasks.First(t => t.ScheduledTask.GetType().Name.Equals("SystemUpdateTask", StringComparison.OrdinalIgnoreCase)).Id, - ActiveConnections = connections.Select(SessionInfoDtoBuilder.GetSessionInfoDto).ToArray() + ActiveConnections = connections.Select(dtoService.GetSessionInfoDto).ToArray() }; } |
