diff options
Diffstat (limited to 'MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs')
| -rw-r--r-- | MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs | 463 |
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 + + } } |
