diff options
| -rw-r--r-- | MediaBrowser.Api/LibraryService.cs | 58 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dto/ItemCounts.cs | 45 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/ApiClient.js | 19 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj | 12 | ||||
| -rw-r--r-- | MediaBrowser.WebDashboard/packages.config | 2 |
6 files changed, 132 insertions, 5 deletions
diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index d5d90cdb2..b0978a2cd 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -1,10 +1,16 @@ -using System.Threading; +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.Model.Dto; using MediaBrowser.Model.Querying; using ServiceStack.ServiceHost; using System; +using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Api @@ -43,7 +49,15 @@ namespace MediaBrowser.Api public class RefreshLibrary : IReturnVoid { } - + + [Route("/Items/Counts", "GET")] + [Api(Description = "Gets counts of various item types")] + public class GetItemCounts : IReturn<ItemCounts> + { + [ApiMember(Name = "UserId", Description = "Optional. Get counts from a specific user's library.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public Guid? UserId { get; set; } + } + /// <summary> /// Class LibraryService /// </summary> @@ -55,16 +69,19 @@ namespace MediaBrowser.Api private readonly IItemRepository _itemRepo; private readonly ILibraryManager _libraryManager; + private readonly IUserManager _userManager; /// <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> - public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager) + /// <param name="userManager">The user manager.</param> + public LibraryService(IItemRepository itemRepo, ILibraryManager libraryManager, IUserManager userManager) { _itemRepo = itemRepo; _libraryManager = libraryManager; + _userManager = userManager; } /// <summary> @@ -80,6 +97,41 @@ namespace MediaBrowser.Api } /// <summary> + /// Gets the specified request. + /// </summary> + /// <param name="request">The request.</param> + /// <returns>System.Object.</returns> + public object Get(GetItemCounts request) + { + var items = GetItems(request.UserId).ToList(); + + var counts = new ItemCounts + { + AlbumCount = items.OfType<MusicAlbum>().Count(), + EpisodeCount = items.OfType<Episode>().Count(), + GameCount = items.OfType<BaseGame>().Count(), + MovieCount = items.OfType<Movie>().Count(), + SeriesCount = items.OfType<Series>().Count(), + SongCount = items.OfType<Audio>().Count(), + TrailerCount = items.OfType<Trailer>().Count() + }; + + return ToOptimizedResult(counts); + } + + protected IEnumerable<BaseItem> GetItems(Guid? userId) + { + if (userId.HasValue) + { + var user = _userManager.GetUserById(userId.Value); + + return _userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user); + } + + return _libraryManager.RootFolder.RecursiveChildren; + } + + /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs new file mode 100644 index 000000000..7f0a91e91 --- /dev/null +++ b/MediaBrowser.Model/Dto/ItemCounts.cs @@ -0,0 +1,45 @@ + +namespace MediaBrowser.Model.Dto +{ + /// <summary> + /// Class LibrarySummary + /// </summary> + public class ItemCounts + { + /// <summary> + /// Gets or sets the movie count. + /// </summary> + /// <value>The movie count.</value> + public int MovieCount { get; set; } + /// <summary> + /// Gets or sets the series count. + /// </summary> + /// <value>The series count.</value> + public int SeriesCount { get; set; } + /// <summary> + /// Gets or sets the episode count. + /// </summary> + /// <value>The episode count.</value> + public int EpisodeCount { get; set; } + /// <summary> + /// Gets or sets the game count. + /// </summary> + /// <value>The game count.</value> + public int GameCount { get; set; } + /// <summary> + /// Gets or sets the trailer count. + /// </summary> + /// <value>The trailer count.</value> + public int TrailerCount { get; set; } + /// <summary> + /// Gets or sets the song count. + /// </summary> + /// <value>The song count.</value> + public int SongCount { get; set; } + /// <summary> + /// Gets or sets the album count. + /// </summary> + /// <value>The album count.</value> + public int AlbumCount { get; set; } + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index dc7f09f2d..bc70dbc13 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -47,6 +47,7 @@ <Compile Include="Dto\IItemDto.cs" /> <Compile Include="Dto\ImageInfo.cs" /> <Compile Include="Dto\ItemByNameCounts.cs" /> + <Compile Include="Dto\ItemCounts.cs" /> <Compile Include="Dto\StudioDto.cs" /> <Compile Include="Entities\IByReferenceItem.cs" /> <Compile Include="Entities\ItemReview.cs" /> diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index b23e337ef..a44bdc4d2 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -102,7 +102,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { self.encodeName = function (name) { name = name.split('/').join('-'); - + name = name.split('?').join('-'); var val = $.param({ name: name }); @@ -2279,6 +2279,23 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }); }; + self.getItemCounts = function (userId) { + + var options = {}; + + if (userId) { + options.userId = userId; + } + + var url = self.getUrl("Items/Counts", options); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + /** Gets a variety of item counts that a person appears in */ diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 42d201d5c..70229a443 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -201,6 +201,18 @@ <Content Include="dashboard-ui\css\images\userdata\played.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
+ <Content Include="dashboard-ui\css\images\views\games.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\css\images\views\movies.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\css\images\views\music.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="dashboard-ui\css\images\views\tvshows.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
<Content Include="dashboard-ui\css\librarybrowser.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index a9c296c07..d179fd23c 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="MediaBrowser.ApiClient.Javascript" version="3.0.110" targetFramework="net45" /> + <package id="MediaBrowser.ApiClient.Javascript" version="3.0.111" targetFramework="net45" /> <package id="ServiceStack.Common" version="3.9.44" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.44" targetFramework="net45" /> </packages>
\ No newline at end of file |
