diff options
| -rw-r--r-- | MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs | 50 | ||||
| -rw-r--r-- | MediaBrowser.Api/LibraryService.cs | 122 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Model/ApiClient/IApiClient.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Model/Dto/ItemCounts.cs | 54 | ||||
| -rw-r--r-- | MediaBrowser.Model/MediaBrowser.Model.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Model/Querying/ItemCountsQuery.cs | 21 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.Internal.nuspec | 4 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Common.nuspec | 2 | ||||
| -rw-r--r-- | Nuget/MediaBrowser.Server.Core.nuspec | 4 |
12 files changed, 143 insertions, 127 deletions
diff --git a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs index 385bef026..77f4f3dba 100644 --- a/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs +++ b/MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs @@ -82,13 +82,16 @@ namespace MediaBrowser.Api.DefaultTheme { var user = _userManager.GetUserById(request.UserId); - var allItems = user.RootFolder.GetRecursiveChildren(user, i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite) + var allItems = user.RootFolder.GetRecursiveChildren(user) .ToList(); - var itemsWithImages = allItems.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)) + var allFavoriteItems = allItems.Where(i => _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite) .ToList(); - var itemsWithBackdrops = allItems.Where(i => i.BackdropImagePaths.Count > 0) + var itemsWithImages = allFavoriteItems.Where(i => !string.IsNullOrEmpty(i.PrimaryImagePath)) + .ToList(); + + var itemsWithBackdrops = allFavoriteItems.Where(i => i.BackdropImagePaths.Count > 0) .ToList(); var view = new FavoritesView(); @@ -157,13 +160,6 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); - view.Artists = itemsWithImages - .OfType<MusicArtist>() - .OrderBy(i => Guid.NewGuid()) - .Take(4) - .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) - .ToList(); - view.MiniSpotlights = itemsWithBackdrops .Except(spotlightItems) .OrderBy(i => Guid.NewGuid()) @@ -171,6 +167,40 @@ namespace MediaBrowser.Api.DefaultTheme .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) .ToList(); + var artists = allItems.OfType<Audio>() + .SelectMany(i => + { + var list = new List<string>(); + + if (!string.IsNullOrEmpty(i.AlbumArtist)) + { + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); + + return list; + }) + .Distinct(StringComparer.OrdinalIgnoreCase) + .OrderBy(i => Guid.NewGuid()) + .Select(i => + { + try + { + return _libraryManager.GetArtist(i); + } + catch + { + return null; + } + }) + .Where(i => i != null && _userDataManager.GetUserData(user.Id, i.GetUserDataKey()).IsFavorite) + .Take(4) + .ToList(); + + view.Artists = artists + .Select(i => _dtoService.GetBaseItemDto(i, fields, user)) + .ToList(); + return ToOptimizedResult(view); } diff --git a/MediaBrowser.Api/LibraryService.cs b/MediaBrowser.Api/LibraryService.cs index 57bc53496..82089536c 100644 --- a/MediaBrowser.Api/LibraryService.cs +++ b/MediaBrowser.Api/LibraryService.cs @@ -156,6 +156,9 @@ namespace MediaBrowser.Api { [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; } + + [ApiMember(Name = "IsFavorite", Description = "Optional. Get counts of favorite items", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] + public bool? IsFavorite { get; set; } } [Route("/Items/{Id}/Ancestors", "GET")] @@ -334,27 +337,29 @@ namespace MediaBrowser.Api { var items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager).ToList(); - var albums = items.OfType<MusicAlbum>().ToList(); - var episodes = items.OfType<Episode>().ToList(); - var games = items.OfType<Game>().ToList(); - var movies = items.OfType<Movie>().ToList(); - var musicVideos = items.OfType<MusicVideo>().ToList(); - var adultVideos = items.OfType<AdultVideo>().ToList(); - var boxsets = items.OfType<BoxSet>().ToList(); - var books = items.OfType<Book>().ToList(); - var songs = items.OfType<Audio>().ToList(); - var series = items.OfType<Series>().ToList(); + var filteredItems = request.UserId.HasValue ? FilterItems(items, request, request.UserId.Value).ToList() : items; + + var albums = filteredItems.OfType<MusicAlbum>().ToList(); + var episodes = filteredItems.OfType<Episode>().ToList(); + var games = filteredItems.OfType<Game>().ToList(); + var movies = filteredItems.OfType<Movie>().ToList(); + var musicVideos = filteredItems.OfType<MusicVideo>().ToList(); + var adultVideos = filteredItems.OfType<AdultVideo>().ToList(); + var boxsets = filteredItems.OfType<BoxSet>().ToList(); + var books = filteredItems.OfType<Book>().ToList(); + var songs = filteredItems.OfType<Audio>().ToList(); + var series = filteredItems.OfType<Series>().ToList(); var counts = new ItemCounts { AlbumCount = albums.Count, EpisodeCount = episodes.Count, GameCount = games.Count, - GameSystemCount = items.OfType<GameSystem>().Count(), + GameSystemCount = filteredItems.OfType<GameSystem>().Count(), MovieCount = movies.Count, SeriesCount = series.Count, SongCount = songs.Count, - TrailerCount = items.OfType<Trailer>().Count(), + TrailerCount = filteredItems.OfType<Trailer>().Count(), MusicVideoCount = musicVideos.Count, AdultVideoCount = adultVideos.Count, BoxSetCount = boxsets.Count, @@ -363,50 +368,38 @@ namespace MediaBrowser.Api UniqueTypes = items.Select(i => i.GetType().Name).Distinct().ToList() }; - if (request.UserId.HasValue) + var people = items.SelectMany(i => i.People) + .Select(i => i.Name) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(i => + { + try + { + return _libraryManager.GetPerson(i); + } + catch + { + return null; + } + }) + .Where(i => i != null) + .ToList(); + + people = request.UserId.HasValue ? FilterItems(people, request, request.UserId.Value).ToList() : people; + counts.PersonCount = people.Count; + + var artists = items.OfType<Audio>().SelectMany(i => { - counts.FavoriteAlbumCount = FavoriteCount(albums, request.UserId.Value); - counts.FavoriteEpisodeCount = FavoriteCount(episodes, request.UserId.Value); - counts.FavoriteGameCount = FavoriteCount(games, request.UserId.Value); - counts.FavoriteMovieCount = FavoriteCount(movies, request.UserId.Value); - counts.FavoriteMusicVideoCount = FavoriteCount(musicVideos, request.UserId.Value); - counts.FavoriteAdultVideoCount = FavoriteCount(adultVideos, request.UserId.Value); - counts.FavoriteBoxSetCount = FavoriteCount(boxsets, request.UserId.Value); - counts.FavoriteBookCount = FavoriteCount(books, request.UserId.Value); - counts.FavoriteSongCount = FavoriteCount(songs, request.UserId.Value); - counts.FavoriteSeriesCount = FavoriteCount(series, request.UserId.Value); - - var people = items.SelectMany(i => i.People) - .Select(i => i.Name) - .Distinct(StringComparer.OrdinalIgnoreCase) - .Select(i => - { - try - { - return _libraryManager.GetPerson(i); - } - catch - { - return null; - } - }) - .Where(i => i != null) - .ToList(); - - counts.FavoritePersonCount = FavoriteCount(people, request.UserId.Value); - - var artists = songs.SelectMany(i => - { - var list = new List<string>(); + var list = new List<string>(); - if (!string.IsNullOrEmpty(i.AlbumArtist)) - { - list.Add(i.AlbumArtist); - } - list.AddRange(i.Artists); + if (!string.IsNullOrEmpty(i.AlbumArtist)) + { + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); - return list; - }) + return list; + }) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(i => { @@ -419,18 +412,31 @@ namespace MediaBrowser.Api return null; } }) - .Where(i => i != null) - .ToList(); + .Where(i => i != null) + .ToList(); - counts.FavoriteArtistCount = FavoriteCount(artists, request.UserId.Value); - } + artists = request.UserId.HasValue ? FilterItems(artists, request, request.UserId.Value).ToList() : artists; + counts.ArtistCount = artists.Count; return ToOptimizedResult(counts); } + private IEnumerable<T> FilterItems<T>(IEnumerable<T> items, GetItemCounts request, Guid userId) + where T : BaseItem + { + if (request.IsFavorite.HasValue) + { + var val = request.IsFavorite.Value; + + items = items.Where(i => _userDataManager.GetUserData(userId, i.GetUserDataKey()).IsFavorite == val); + } + + return items; + } + private int FavoriteCount(IEnumerable<BaseItem> items, Guid userId) { - return items.Count(i => _userDataManager.GetUserData(userId, i.GetUserDataKey()).IsFavorite); + return items.AsParallel().Count(i => _userDataManager.GetUserData(userId, i.GetUserDataKey()).IsFavorite); } /// <summary> diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index 2bac30fe2..3a0ecdf0d 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -200,7 +200,7 @@ namespace MediaBrowser.Api.UserLibrary { var userdata = UserDataRepository.GetUserData(user.Id, i.GetUserDataKey()); - return userdata != null && userdata.Likes.HasValue && userdata.IsFavorite; + return userdata != null && userdata.IsFavorite; }); } diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index d91d72e80..e88953b9c 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -290,6 +290,9 @@ <Compile Include="..\MediaBrowser.Model\Querying\ArtistsQuery.cs"> <Link>Querying\ArtistsQuery.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Querying\ItemCountsQuery.cs"> + <Link>Querying\ItemCountsQuery.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Querying\ItemFields.cs"> <Link>Querying\ItemFields.cs</Link> </Compile> diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 4d62b472d..6a14817a6 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -277,6 +277,9 @@ <Compile Include="..\MediaBrowser.Model\Querying\ArtistsQuery.cs"> <Link>Querying\ArtistsQuery.cs</Link> </Compile> + <Compile Include="..\MediaBrowser.Model\Querying\ItemCountsQuery.cs"> + <Link>Querying\ItemCountsQuery.cs</Link> + </Compile> <Compile Include="..\MediaBrowser.Model\Querying\ItemFields.cs"> <Link>Querying\ItemFields.cs</Link> </Compile> diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index df95ad6dc..21894819d 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -221,9 +221,9 @@ namespace MediaBrowser.Model.ApiClient /// <summary> /// Gets the item counts async. /// </summary> - /// <param name="userId">The user id.</param> + /// <param name="query">The query.</param> /// <returns>Task{ItemCounts}.</returns> - Task<ItemCounts> GetItemCountsAsync(string userId); + Task<ItemCounts> GetItemCountsAsync(ItemCountsQuery query); /// <summary> /// Queries for items diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs index 674f7cd20..34fe6ca64 100644 --- a/MediaBrowser.Model/Dto/ItemCounts.cs +++ b/MediaBrowser.Model/Dto/ItemCounts.cs @@ -1,5 +1,4 @@ - -using System.Collections.Generic; +using System.Collections.Generic; namespace MediaBrowser.Model.Dto { @@ -70,55 +69,8 @@ namespace MediaBrowser.Model.Dto /// <value>The unique types.</value> public List<string> UniqueTypes { get; set; } - public int FavoriteAdultVideoCount { get; set; } - /// <summary> - /// Gets or sets the movie count. - /// </summary> - /// <value>The movie count.</value> - public int FavoriteMovieCount { get; set; } - /// <summary> - /// Gets or sets the series count. - /// </summary> - /// <value>The series count.</value> - public int FavoriteSeriesCount { get; set; } - /// <summary> - /// Gets or sets the episode count. - /// </summary> - /// <value>The episode count.</value> - public int FavoriteEpisodeCount { get; set; } - /// <summary> - /// Gets or sets the game count. - /// </summary> - /// <value>The game count.</value> - public int FavoriteGameCount { get; set; } - /// <summary> - /// Gets or sets the song count. - /// </summary> - /// <value>The song count.</value> - public int FavoriteSongCount { get; set; } - /// <summary> - /// Gets or sets the album count. - /// </summary> - /// <value>The album count.</value> - public int FavoriteAlbumCount { get; set; } - /// <summary> - /// Gets or sets the music video count. - /// </summary> - /// <value>The music video count.</value> - public int FavoriteMusicVideoCount { get; set; } - /// <summary> - /// Gets or sets the box set count. - /// </summary> - /// <value>The box set count.</value> - public int FavoriteBoxSetCount { get; set; } - /// <summary> - /// Gets or sets the book count. - /// </summary> - /// <value>The book count.</value> - public int FavoriteBookCount { get; set; } - - public int FavoritePersonCount { get; set; } - public int FavoriteArtistCount { get; set; } + public int PersonCount { get; set; } + public int ArtistCount { get; set; } public ItemCounts() { diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index fd450b585..caf89346c 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -82,6 +82,7 @@ <Compile Include="Notifications\NotificationResult.cs" /> <Compile Include="Notifications\NotificationsSummary.cs" /> <Compile Include="Querying\ArtistsQuery.cs" /> + <Compile Include="Querying\ItemCountsQuery.cs" /> <Compile Include="Querying\ItemReviewsResult.cs" /> <Compile Include="Querying\ItemsByNameQuery.cs" /> <Compile Include="Entities\BaseItemInfo.cs" /> diff --git a/MediaBrowser.Model/Querying/ItemCountsQuery.cs b/MediaBrowser.Model/Querying/ItemCountsQuery.cs new file mode 100644 index 000000000..0bf681537 --- /dev/null +++ b/MediaBrowser.Model/Querying/ItemCountsQuery.cs @@ -0,0 +1,21 @@ + +namespace MediaBrowser.Model.Querying +{ + /// <summary> + /// Class ItemCountsQuery + /// </summary> + public class ItemCountsQuery + { + /// <summary> + /// Gets or sets the user id. + /// </summary> + /// <value>The user id.</value> + public string UserId { get; set; } + + /// <summary> + /// Gets or sets a value indicating whether this instance is favorite. + /// </summary> + /// <value><c>null</c> if [is favorite] contains no value, <c>true</c> if [is favorite]; otherwise, <c>false</c>.</value> + public bool? IsFavorite { get; set; } + } +} diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 7064a5ce7..760e874cd 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> - <version>3.0.229</version> + <version>3.0.230</version> <title>MediaBrowser.Common.Internal</title> <authors>Luke</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.229" /> + <dependency id="MediaBrowser.Common" version="3.0.230" /> <dependency id="NLog" version="2.1.0" /> <dependency id="ServiceStack.Text" version="3.9.58" /> <dependency id="SimpleInjector" version="2.3.2" /> diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 9324361a4..07d7e617e 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common</id> - <version>3.0.229</version> + <version>3.0.230</version> <title>MediaBrowser.Common</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 76c675f8e..45b7c9c0a 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>MediaBrowser.Server.Core</id> - <version>3.0.229</version> + <version>3.0.230</version> <title>Media Browser.Server.Core</title> <authors>Media Browser Team</authors> <owners>ebr,Luke,scottisafool</owners> @@ -12,7 +12,7 @@ <description>Contains core components required to build plugins for Media Browser Server.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> - <dependency id="MediaBrowser.Common" version="3.0.229" /> + <dependency id="MediaBrowser.Common" version="3.0.230" /> </dependencies> </metadata> <files> |
