aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs')
-rw-r--r--MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs463
1 files changed, 261 insertions, 202 deletions
diff --git a/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs b/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
index e297a2a57..e2169c9c3 100644
--- a/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
+++ b/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
@@ -9,206 +9,265 @@ using System.Threading.Tasks;
namespace MediaBrowser.Api.Reports
{
- /// <summary> A report stat builder. </summary>
- /// <seealso cref="T:MediaBrowser.Api.Reports.ReportBuilderBase"/>
- public class ReportStatBuilder : ReportBuilderBase
- {
- /// <summary>
- /// Initializes a new instance of the MediaBrowser.Api.Reports.ReportStatBuilder class. </summary>
- /// <param name="libraryManager"> Manager for library. </param>
- public ReportStatBuilder(ILibraryManager libraryManager)
- : base(libraryManager)
- {
- }
-
- /// <summary> Gets report stat result. </summary>
- /// <param name="items"> The items. </param>
- /// <param name="reportRowType"> Type of the report row. </param>
- /// <param name="topItem"> The top item. </param>
- /// <returns> The report stat result. </returns>
- public ReportStatResult GetReportStatResult(BaseItem[] items, ReportViewType reportRowType, int topItem = 5)
- {
- ReportStatResult result = new ReportStatResult();
- result = this.GetResultGenres(result, items, topItem);
- result = this.GetResultStudios(result, items, topItem);
- result = this.GetResultPersons(result, items, topItem);
- result = this.GetResultProductionYears(result, items, topItem);
- result = this.GetResulProductionLocations(result, items, topItem);
- result = this.GetResultCommunityRatings(result, items, topItem);
- result = this.GetResultParentalRatings(result, items, topItem);
-
- switch (reportRowType)
- {
- case ReportViewType.Season:
- case ReportViewType.Series:
- case ReportViewType.MusicAlbum:
- case ReportViewType.MusicArtist:
- case ReportViewType.Game:
- break;
- case ReportViewType.Movie:
- case ReportViewType.BoxSet:
-
- break;
- case ReportViewType.Book:
- case ReportViewType.Episode:
- case ReportViewType.Video:
- case ReportViewType.MusicVideo:
- case ReportViewType.Trailer:
- case ReportViewType.Audio:
- case ReportViewType.BaseItem:
- default:
- break;
- }
-
- result.Groups = result.Groups.OrderByDescending(n => n.Items.Count()).ToList();
-
- return result;
- }
-
- private ReportStatResult GetResultGenres(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderGenres"), topItem,
- items.SelectMany(x => x.Genres)
- .GroupBy(x => x)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key,
- Value = x.Count().ToString(),
- Id = GetGenreID(x.Key)
- }));
- return result;
-
- }
-
- private ReportStatResult GetResultStudios(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderStudios"), topItem,
- items.SelectMany(x => x.Studios)
- .GroupBy(x => x)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key,
- Value = x.Count().ToString(),
- Id = GetStudioID(x.Key)
- })
- );
-
- return result;
-
- }
-
- private ReportStatResult GetResultPersons(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- List<string> t = new List<string> { PersonType.Actor, PersonType.Composer, PersonType.Director, PersonType.GuestStar, PersonType.Producer, PersonType.Writer, "Artist", "AlbumArtist" };
- foreach (var item in t)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("Option" + item), topItem,
- items.SelectMany(x => x.People)
- .Where(n => n.Type == item)
- .GroupBy(x => x.Name)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key,
- Value = x.Count().ToString(),
- Id = GetPersonID(x.Key)
- })
- );
- }
-
- return result;
- }
-
- private ReportStatResult GetResultCommunityRatings(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("LabelCommunityRating"), topItem,
- items.Where(x => x.CommunityRating != null && x.CommunityRating > 0)
- .GroupBy(x => x.CommunityRating)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key.ToString(),
- Value = x.Count().ToString()
- })
- );
-
- return result;
- }
-
- private ReportStatResult GetResultParentalRatings(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderParentalRatings"), topItem,
- items.Where(x => x.OfficialRating != null)
- .GroupBy(x => x.OfficialRating)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key.ToString(),
- Value = x.Count().ToString()
- })
- );
-
- return result;
- }
-
-
- private ReportStatResult GetResultProductionYears(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderYears"), topItem,
- items.Where(x => x.ProductionYear != null && x.ProductionYear > 0)
- .GroupBy(x => x.ProductionYear)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key.ToString(),
- Value = x.Count().ToString()
- })
- );
-
- return result;
- }
-
- private ReportStatResult GetResulProductionLocations(ReportStatResult result, BaseItem[] items, int topItem = 5)
- {
- this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderCountries"), topItem,
- items.OfType<IHasProductionLocations>()
- .Where(x => x.ProductionLocations != null)
- .SelectMany(x => x.ProductionLocations)
- .GroupBy(x => x)
- .OrderByDescending(x => x.Count())
- .Take(topItem)
- .Select(x => new ReportStatItem
- {
- Name = x.Key.ToString(),
- Value = x.Count().ToString()
- })
- );
-
- return result;
- }
-
-
- /// <summary> Gets the groups. </summary>
- /// <param name="result"> The result. </param>
- /// <param name="header"> The header. </param>
- /// <param name="topItem"> The top item. </param>
- /// <param name="top"> The top. </param>
- private void GetGroups(ReportStatResult result, string header, int topItem, IEnumerable<ReportStatItem> top)
- {
- if (top.Count() > 0)
- {
- var group = new ReportStatGroup { Header = ReportStatGroup.FormatedHeader(header, topItem) };
- group.Items.AddRange(top);
- result.Groups.Add(group);
- }
- }
- }
+ /// <summary> A report stat builder. </summary>
+ /// <seealso cref="T:MediaBrowser.Api.Reports.ReportBuilderBase"/>
+ public class ReportStatBuilder : ReportBuilderBase
+ {
+ #region [Constructors]
+
+ /// <summary>
+ /// Initializes a new instance of the MediaBrowser.Api.Reports.ReportStatBuilder class. </summary>
+ /// <param name="libraryManager"> Manager for library. </param>
+ public ReportStatBuilder(ILibraryManager libraryManager)
+ : base(libraryManager)
+ {
+ }
+
+ #endregion
+
+ #region [Public Methods]
+
+ /// <summary> Gets report stat result. </summary>
+ /// <param name="items"> The items. </param>
+ /// <param name="reportIncludeItemTypes"> List of types of the report include items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The report stat result. </returns>
+ public ReportStatResult GetResult(BaseItem[] items, ReportIncludeItemTypes reportIncludeItemTypes, int topItem = 5)
+ {
+ ReportStatResult result = new ReportStatResult();
+ result = this.GetResultGenres(result, items, topItem);
+ result = this.GetResultStudios(result, items, topItem);
+ result = this.GetResultPersons(result, items, topItem);
+ result = this.GetResultProductionYears(result, items, topItem);
+ result = this.GetResulProductionLocations(result, items, topItem);
+ result = this.GetResultCommunityRatings(result, items, topItem);
+ result = this.GetResultParentalRatings(result, items, topItem);
+
+ switch (reportIncludeItemTypes)
+ {
+ case ReportIncludeItemTypes.Season:
+ case ReportIncludeItemTypes.Series:
+ case ReportIncludeItemTypes.MusicAlbum:
+ case ReportIncludeItemTypes.MusicArtist:
+ case ReportIncludeItemTypes.Game:
+ break;
+ case ReportIncludeItemTypes.Movie:
+ case ReportIncludeItemTypes.BoxSet:
+
+ break;
+ case ReportIncludeItemTypes.Book:
+ case ReportIncludeItemTypes.Episode:
+ case ReportIncludeItemTypes.Video:
+ case ReportIncludeItemTypes.MusicVideo:
+ case ReportIncludeItemTypes.Trailer:
+ case ReportIncludeItemTypes.Audio:
+ case ReportIncludeItemTypes.BaseItem:
+ default:
+ break;
+ }
+
+ result.Groups = result.Groups.OrderByDescending(n => n.Items.Count()).ToList();
+
+ return result;
+ }
+
+ #endregion
+
+ #region [Protected Internal Methods]
+ /// <summary> Gets the headers. </summary>
+ /// <typeparam name="H"> Type of the header. </typeparam>
+ /// <param name="request"> The request. </param>
+ /// <returns> The headers. </returns>
+ /// <seealso cref="M:MediaBrowser.Api.Reports.ReportBuilderBase.GetHeaders{H}(H)"/>
+ protected internal override List<ReportHeader> GetHeaders<H>(H request)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+
+ #region [Private Methods]
+
+ /// <summary> Gets the groups. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="header"> The header. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <param name="top"> The top. </param>
+ private void GetGroups(ReportStatResult result, string header, int topItem, IEnumerable<ReportStatItem> top)
+ {
+ if (top.Count() > 0)
+ {
+ var group = new ReportStatGroup { Header = ReportStatGroup.FormatedHeader(header, topItem) };
+ group.Items.AddRange(top);
+ result.Groups.Add(group);
+ }
+ }
+
+ /// <summary> Gets resul production locations. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The resul production locations. </returns>
+ private ReportStatResult GetResulProductionLocations(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderCountries"), topItem,
+ items.OfType<IHasProductionLocations>()
+ .Where(x => x.ProductionLocations != null)
+ .SelectMany(x => x.ProductionLocations)
+ .GroupBy(x => x)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key.ToString(),
+ Value = x.Count().ToString()
+ })
+ );
+
+ return result;
+ }
+
+ /// <summary> Gets result community ratings. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result community ratings. </returns>
+ private ReportStatResult GetResultCommunityRatings(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("LabelCommunityRating"), topItem,
+ items.Where(x => x.CommunityRating != null && x.CommunityRating > 0)
+ .GroupBy(x => x.CommunityRating)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key.ToString(),
+ Value = x.Count().ToString()
+ })
+ );
+
+ return result;
+ }
+
+ /// <summary> Gets result genres. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result genres. </returns>
+ private ReportStatResult GetResultGenres(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderGenres"), topItem,
+ items.SelectMany(x => x.Genres)
+ .GroupBy(x => x)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key,
+ Value = x.Count().ToString(),
+ Id = GetGenreID(x.Key)
+ }));
+ return result;
+
+ }
+
+ /// <summary> Gets result parental ratings. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result parental ratings. </returns>
+ private ReportStatResult GetResultParentalRatings(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderParentalRatings"), topItem,
+ items.Where(x => x.OfficialRating != null)
+ .GroupBy(x => x.OfficialRating)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key.ToString(),
+ Value = x.Count().ToString()
+ })
+ );
+
+ return result;
+ }
+
+ /// <summary> Gets result persons. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result persons. </returns>
+ private ReportStatResult GetResultPersons(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ List<string> t = new List<string> { PersonType.Actor, PersonType.Composer, PersonType.Director, PersonType.GuestStar, PersonType.Producer, PersonType.Writer, "Artist", "AlbumArtist" };
+ foreach (var item in t)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("Option" + item), topItem,
+ items.SelectMany(x => x.People)
+ .Where(n => n.Type == item)
+ .GroupBy(x => x.Name)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key,
+ Value = x.Count().ToString(),
+ Id = GetPersonID(x.Key)
+ })
+ );
+ }
+
+ return result;
+ }
+
+ /// <summary> Gets result production years. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result production years. </returns>
+ private ReportStatResult GetResultProductionYears(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderYears"), topItem,
+ items.Where(x => x.ProductionYear != null && x.ProductionYear > 0)
+ .GroupBy(x => x.ProductionYear)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key.ToString(),
+ Value = x.Count().ToString()
+ })
+ );
+
+ return result;
+ }
+
+ /// <summary> Gets result studios. </summary>
+ /// <param name="result"> The result. </param>
+ /// <param name="items"> The items. </param>
+ /// <param name="topItem"> The top item. </param>
+ /// <returns> The result studios. </returns>
+ private ReportStatResult GetResultStudios(ReportStatResult result, BaseItem[] items, int topItem = 5)
+ {
+ this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderStudios"), topItem,
+ items.SelectMany(x => x.Studios)
+ .GroupBy(x => x)
+ .OrderByDescending(x => x.Count())
+ .Take(topItem)
+ .Select(x => new ReportStatItem
+ {
+ Name = x.Key,
+ Value = x.Count().ToString(),
+ Id = GetStudioID(x.Key)
+ })
+ );
+
+ return result;
+
+ }
+
+ #endregion
+
+ }
}