aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/UserViewsService.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-04-15 17:59:20 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-04-15 17:59:20 -0400
commitc90cdef3ba630707d16c63dc4392fcc54bcf122d (patch)
tree1a90e8896cc0d998d1aa8a34e7f2dd43d3dd456a /MediaBrowser.Api/UserLibrary/UserViewsService.cs
parent064b5e82e436c717f74a4d0a353e01e20da9752c (diff)
added user view setting
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/UserViewsService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/UserViewsService.cs121
1 files changed, 121 insertions, 0 deletions
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<QueryResult<BaseItemDto>>
+ {
+ /// <summary>
+ /// Gets or sets the user id.
+ /// </summary>
+ /// <value>The user id.</value>
+ [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<List<SpecialViewOption>>
+ {
+ /// <summary>
+ /// Gets or sets the user id.
+ /// </summary>
+ /// <value>The user id.</value>
+ [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<object> 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<BaseItemDto>
+ {
+ Items = dtos,
+ TotalRecordCount = dtos.Length
+ };
+
+ return ToOptimizedResult(result);
+ }
+
+ public async Task<object> Get(GetSpecialViewOptions request)
+ {
+ var user = _userManager.GetUserById(request.UserId);
+
+ var views = user.RootFolder
+ .GetChildren(user, true)
+ .OfType<CollectionFolder>()
+ .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; }
+ }
+}