From c90cdef3ba630707d16c63dc4392fcc54bcf122d Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 15 Apr 2015 17:59:20 -0400 Subject: added user view setting --- MediaBrowser.Api/UserLibrary/UserViewsService.cs | 121 +++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 MediaBrowser.Api/UserLibrary/UserViewsService.cs (limited to 'MediaBrowser.Api/UserLibrary/UserViewsService.cs') diff --git a/MediaBrowser.Api/UserLibrary/UserViewsService.cs b/MediaBrowser.Api/UserLibrary/UserViewsService.cs new file mode 100644 index 000000000..9b00b42f7 --- /dev/null +++ b/MediaBrowser.Api/UserLibrary/UserViewsService.cs @@ -0,0 +1,121 @@ +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Library; +using MediaBrowser.Model.Querying; +using ServiceStack; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.UserLibrary +{ + [Route("/Users/{UserId}/Views", "GET")] + public class GetUserViews : IReturn> + { + /// + /// Gets or sets the user id. + /// + /// The user id. + [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UserId { get; set; } + + [ApiMember(Name = "IncludeExternalContent", Description = "Whether or not to include external views such as channels or live tv", IsRequired = true, DataType = "boolean", ParameterType = "query", Verb = "POST")] + public bool? IncludeExternalContent { get; set; } + } + + [Route("/Users/{UserId}/SpecialViewOptions", "GET")] + public class GetSpecialViewOptions : IReturn> + { + /// + /// Gets or sets the user id. + /// + /// The user id. + [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string UserId { get; set; } + } + + public class UserViewsService : BaseApiService + { + private readonly IUserManager _userManager; + private readonly IUserViewManager _userViewManager; + private readonly IDtoService _dtoService; + + public UserViewsService(IUserManager userManager, IUserViewManager userViewManager, IDtoService dtoService) + { + _userManager = userManager; + _userViewManager = userViewManager; + _dtoService = dtoService; + } + + public async Task Get(GetUserViews request) + { + var query = new UserViewQuery + { + UserId = request.UserId + }; + + if (request.IncludeExternalContent.HasValue) + { + query.IncludeExternalContent = request.IncludeExternalContent.Value; + } + + var folders = await _userViewManager.GetUserViews(query, CancellationToken.None).ConfigureAwait(false); + + var dtoOptions = GetDtoOptions(request); + + var user = _userManager.GetUserById(request.UserId); + + var dtos = folders.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)) + .ToArray(); + + var result = new QueryResult + { + Items = dtos, + TotalRecordCount = dtos.Length + }; + + return ToOptimizedResult(result); + } + + public async Task Get(GetSpecialViewOptions request) + { + var user = _userManager.GetUserById(request.UserId); + + var views = user.RootFolder + .GetChildren(user, true) + .OfType() + .Where(i => IsEligibleForSpecialView(i)) + .ToList(); + + var list = views + .Select(i => new SpecialViewOption + { + Name = i.Name, + Id = i.Id.ToString("N") + + }) + .OrderBy(i => i.Name) + .ToList(); + + return ToOptimizedResult(list); + } + + private bool IsEligibleForSpecialView(CollectionFolder view) + { + var types = new[] { CollectionType.Movies, CollectionType.TvShows, CollectionType.Games, CollectionType.Music }; + + return types.Contains(view.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase); + } + } + + class SpecialViewOption + { + public string Name { get; set; } + public string Id { get; set; } + } +} -- cgit v1.2.3