| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 | 
							- using MediaBrowser.Controller.Entities;
 
- using MediaBrowser.Controller.Library;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- namespace MediaBrowser.Api.Reports
 
- {
 
-     /// <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.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 != null && top.Count() > 0)
 
-             {
 
-                 var group = new ReportStatGroup { Header = ReportStatGroup.FormatedHeader(header, topItem) };
 
-                 group.Items.AddRange(top);
 
-                 result.Groups.Add(group);
 
-             }
 
-         }
 
-         /// <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, GetLocalizedHeader(HeaderMetadata.CommunityRating), 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, GetLocalizedHeader(HeaderMetadata.Genres), 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, GetLocalizedHeader(HeaderMetadata.ParentalRatings), 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<HeaderMetadata> t = new List<HeaderMetadata> 
 
-             { 
 
-                 HeaderMetadata.Actor, 
 
-                 HeaderMetadata.Composer, 
 
-                 HeaderMetadata.Director, 
 
-                 HeaderMetadata.GuestStar, 
 
-                 HeaderMetadata.Producer,
 
-                 HeaderMetadata.Writer, 
 
-                 HeaderMetadata.Artist, 
 
-                 HeaderMetadata.AlbumArtist
 
-             };
 
-             foreach (var item in t)
 
-             {
 
-                 var ps = items.SelectMany(x => _libraryManager.GetPeople(x))
 
-                                 .Where(n => n.Type == item.ToString())
 
-                                 .GroupBy(x => x.Name)
 
-                                 .OrderByDescending(x => x.Count())
 
-                                 .Take(topItem);
 
-                 if (ps != null && ps.Count() > 0)
 
-                     this.GetGroups(result, GetLocalizedHeader(item), topItem,
 
-                             ps.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, GetLocalizedHeader(HeaderMetadata.Year), 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, GetLocalizedHeader(HeaderMetadata.Studios), 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
 
-     }
 
- }
 
 
  |