aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/DefaultTheme/DefaultThemeService.cs50
-rw-r--r--MediaBrowser.Api/LibraryService.cs122
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs2
-rw-r--r--MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj3
-rw-r--r--MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj3
-rw-r--r--MediaBrowser.Model/ApiClient/IApiClient.cs4
-rw-r--r--MediaBrowser.Model/Dto/ItemCounts.cs54
-rw-r--r--MediaBrowser.Model/MediaBrowser.Model.csproj1
-rw-r--r--MediaBrowser.Model/Querying/ItemCountsQuery.cs21
-rw-r--r--Nuget/MediaBrowser.Common.Internal.nuspec4
-rw-r--r--Nuget/MediaBrowser.Common.nuspec2
-rw-r--r--Nuget/MediaBrowser.Server.Core.nuspec4
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>