mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-06-23 15:30:56 -04:00
Reports - icons and people fix
This commit is contained in:
parent
27d6135493
commit
0fa55fd6de
@ -159,7 +159,17 @@ namespace MediaBrowser.Api.Reports
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HeaderMetadata.UserPrimaryImageTag:
|
case HeaderMetadata.UserPrimaryImageTag:
|
||||||
option.Column = (i, r) => i.UserPrimaryImageTag;
|
//option.Column = (i, r) => i.UserPrimaryImageTag;
|
||||||
|
option.Column = (i, r) =>
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(i.UserId))
|
||||||
|
{
|
||||||
|
MediaBrowser.Controller.Entities.User user = _userManager.GetUserById(i.UserId);
|
||||||
|
if (user != null)
|
||||||
|
return user.PrimaryImagePath;
|
||||||
|
}
|
||||||
|
return string.Empty;
|
||||||
|
};
|
||||||
option.Header.SortField = "";
|
option.Header.SortField = "";
|
||||||
break;
|
break;
|
||||||
case HeaderMetadata.Severity:
|
case HeaderMetadata.Severity:
|
||||||
|
@ -28,26 +28,51 @@ namespace MediaBrowser.Api.Reports
|
|||||||
/// <seealso cref="T:MediaBrowser.Api.BaseApiService"/>
|
/// <seealso cref="T:MediaBrowser.Api.BaseApiService"/>
|
||||||
public class ReportsService : BaseApiService
|
public class ReportsService : BaseApiService
|
||||||
{
|
{
|
||||||
|
#region [Constructors]
|
||||||
|
|
||||||
/// <summary> Manager for user. </summary>
|
|
||||||
private readonly IUserManager _userManager;
|
|
||||||
|
|
||||||
/// <summary> Manager for library. </summary>
|
|
||||||
private readonly ILibraryManager _libraryManager;
|
|
||||||
/// <summary> The localization. </summary>
|
|
||||||
private readonly ILocalizationManager _localization;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the MediaBrowser.Api.Reports.ReportsService class. </summary>
|
/// Initializes a new instance of the MediaBrowser.Api.Reports.ReportsService class. </summary>
|
||||||
/// <param name="userManager"> Manager for user. </param>
|
/// <param name="userManager"> Manager for user. </param>
|
||||||
/// <param name="libraryManager"> Manager for library. </param>
|
/// <param name="libraryManager"> Manager for library. </param>
|
||||||
/// <param name="localization"> The localization. </param>
|
/// <param name="localization"> The localization. </param>
|
||||||
public ReportsService(IUserManager userManager, ILibraryManager libraryManager, ILocalizationManager localization)
|
/// <param name="activityManager"> Manager for activity. </param>
|
||||||
|
public ReportsService(IUserManager userManager, ILibraryManager libraryManager, ILocalizationManager localization, IActivityManager activityManager, IActivityRepository repo)
|
||||||
{
|
{
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
_localization = localization;
|
_localization = localization;
|
||||||
|
_activityManager = activityManager;
|
||||||
|
_repo = repo;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region [Private Fields]
|
||||||
|
|
||||||
|
private readonly IActivityManager _activityManager; ///< Manager for activity
|
||||||
|
|
||||||
|
/// <summary> Manager for library. </summary>
|
||||||
|
private readonly ILibraryManager _libraryManager; ///< Manager for library
|
||||||
|
/// <summary> The localization. </summary>
|
||||||
|
|
||||||
|
private readonly ILocalizationManager _localization; ///< The localization
|
||||||
|
|
||||||
|
private readonly IActivityRepository _repo;
|
||||||
|
|
||||||
|
/// <summary> Manager for user. </summary>
|
||||||
|
private readonly IUserManager _userManager; ///< Manager for user
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region [Public Methods]
|
||||||
|
|
||||||
|
/// <summary> Gets the given request. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> A Task<object> </returns>
|
||||||
|
public async Task<object> Get(GetActivityLogs request)
|
||||||
|
{
|
||||||
|
ReportResult result = await GetReportActivities(request).ConfigureAwait(false);
|
||||||
|
return ToOptimizedResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Gets the given request. </summary>
|
/// <summary> Gets the given request. </summary>
|
||||||
@ -58,11 +83,25 @@ namespace MediaBrowser.Api.Reports
|
|||||||
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
ReportViewType reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
ReportViewType reportViewType = ReportHelper.GetReportViewType(request.ReportView);
|
||||||
ReportBuilder reportBuilder = new ReportBuilder(_libraryManager);
|
ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
||||||
var reportResult = reportBuilder.GetReportHeaders(reportRowType, request);
|
|
||||||
|
|
||||||
return ToOptimizedResult(reportResult);
|
List<ReportHeader> result = new List<ReportHeader>();
|
||||||
|
switch (reportViewType)
|
||||||
|
{
|
||||||
|
case ReportViewType.ReportData:
|
||||||
|
ReportBuilder dataBuilder = new ReportBuilder(_libraryManager);
|
||||||
|
result = dataBuilder.GetHeaders(request);
|
||||||
|
break;
|
||||||
|
case ReportViewType.ReportStatistics:
|
||||||
|
break;
|
||||||
|
case ReportViewType.ReportActivities:
|
||||||
|
ReportActivitiesBuilder activityBuilder = new ReportActivitiesBuilder(_libraryManager, _userManager);
|
||||||
|
result = activityBuilder.GetHeaders(request);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ToOptimizedResult(result);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +118,18 @@ namespace MediaBrowser.Api.Reports
|
|||||||
return ToOptimizedResult(reportResult);
|
return ToOptimizedResult(reportResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets the given request. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> A Task<object> </returns>
|
||||||
|
public async Task<object> Get(GetReportStatistics request)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
||||||
|
return null;
|
||||||
|
var reportResult = await GetReportStatistic(request);
|
||||||
|
|
||||||
|
return ToOptimizedResult(reportResult);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Gets the given request. </summary>
|
/// <summary> Gets the given request. </summary>
|
||||||
/// <param name="request"> The request. </param>
|
/// <param name="request"> The request. </param>
|
||||||
/// <returns> A Task<object> </returns>
|
/// <returns> A Task<object> </returns>
|
||||||
@ -87,6 +138,7 @@ namespace MediaBrowser.Api.Reports
|
|||||||
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
ReportViewType reportViewType = ReportHelper.GetReportViewType(request.ReportView);
|
||||||
var headers = new Dictionary<string, string>();
|
var headers = new Dictionary<string, string>();
|
||||||
string fileExtension = "csv";
|
string fileExtension = "csv";
|
||||||
string contentType = "text/plain;charset='utf-8'";
|
string contentType = "text/plain;charset='utf-8'";
|
||||||
@ -105,221 +157,40 @@ namespace MediaBrowser.Api.Reports
|
|||||||
headers["Content-Disposition"] = string.Format("attachment; filename=\"{0}\"", filename);
|
headers["Content-Disposition"] = string.Format("attachment; filename=\"{0}\"", filename);
|
||||||
headers["Content-Encoding"] = "UTF-8";
|
headers["Content-Encoding"] = "UTF-8";
|
||||||
|
|
||||||
ReportViewType reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
ReportResult result = null;
|
||||||
ReportBuilder reportBuilder = new ReportBuilder(_libraryManager);
|
switch (reportViewType)
|
||||||
|
{
|
||||||
|
case ReportViewType.ReportStatistics:
|
||||||
|
case ReportViewType.ReportData:
|
||||||
|
ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
||||||
|
ReportBuilder dataBuilder = new ReportBuilder(_libraryManager);
|
||||||
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
||||||
ReportResult reportResult = reportBuilder.GetReportResult(queryResult.Items, reportRowType, request);
|
result = dataBuilder.GetResult(queryResult.Items, request);
|
||||||
|
result.TotalRecordCount = queryResult.TotalRecordCount;
|
||||||
|
break;
|
||||||
|
case ReportViewType.ReportActivities:
|
||||||
|
result = await GetReportActivities(request).ConfigureAwait(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
reportResult.TotalRecordCount = queryResult.TotalRecordCount;
|
string returnResult = string.Empty;
|
||||||
|
|
||||||
string result = string.Empty;
|
|
||||||
switch (request.ExportType)
|
switch (request.ExportType)
|
||||||
{
|
{
|
||||||
case ReportExportType.CSV:
|
case ReportExportType.CSV:
|
||||||
result = new ReportExport().ExportToCsv(reportResult);
|
returnResult = new ReportExport().ExportToCsv(result);
|
||||||
break;
|
break;
|
||||||
case ReportExportType.Excel:
|
case ReportExportType.Excel:
|
||||||
result = new ReportExport().ExportToExcel(reportResult);
|
returnResult = new ReportExport().ExportToExcel(result);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
object ro = ResultFactory.GetResult(result, contentType, headers);
|
object ro = ResultFactory.GetResult(returnResult, contentType, headers);
|
||||||
return ro;
|
return ro;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Gets the given request. </summary>
|
#endregion
|
||||||
/// <param name="request"> The request. </param>
|
|
||||||
/// <returns> A Task<object> </returns>
|
|
||||||
public async Task<object> Get(GetReportStatistics request)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(request.IncludeItemTypes))
|
|
||||||
return null;
|
|
||||||
var reportResult = await GetReportStatistic(request);
|
|
||||||
|
|
||||||
return ToOptimizedResult(reportResult);
|
#region [Internal Methods]
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Gets report statistic. </summary>
|
|
||||||
/// <param name="request"> The request. </param>
|
|
||||||
/// <returns> The report statistic. </returns>
|
|
||||||
private async Task<ReportStatResult> GetReportStatistic(GetReportStatistics request)
|
|
||||||
{
|
|
||||||
ReportViewType reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
|
||||||
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
|
||||||
|
|
||||||
ReportStatBuilder reportBuilder = new ReportStatBuilder(_libraryManager);
|
|
||||||
ReportStatResult reportResult = reportBuilder.GetReportStatResult(queryResult.Items, ReportHelper.GetRowType(request.IncludeItemTypes), request.TopItems ?? 5);
|
|
||||||
reportResult.TotalRecordCount = reportResult.Groups.Count();
|
|
||||||
return reportResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Gets report result. </summary>
|
|
||||||
/// <param name="request"> The request. </param>
|
|
||||||
/// <returns> The report result. </returns>
|
|
||||||
private async Task<ReportResult> GetReportResult(GetItemReport request)
|
|
||||||
{
|
|
||||||
|
|
||||||
ReportViewType reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
|
||||||
ReportBuilder reportBuilder = new ReportBuilder(_libraryManager);
|
|
||||||
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
|
||||||
ReportResult reportResult = reportBuilder.GetReportResult(queryResult.Items, reportRowType, request);
|
|
||||||
reportResult.TotalRecordCount = queryResult.TotalRecordCount;
|
|
||||||
|
|
||||||
return reportResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Gets query result. </summary>
|
|
||||||
/// <param name="request"> The request. </param>
|
|
||||||
/// <returns> The query result. </returns>
|
|
||||||
private async Task<QueryResult<BaseItem>> GetQueryResult(BaseReportRequest request)
|
|
||||||
{
|
|
||||||
// Placeholder in case needed later
|
|
||||||
request.Recursive = true;
|
|
||||||
var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
|
|
||||||
request.Fields = "MediaSources,DateCreated,Settings,Studios,SyncInfo,ItemCounts";
|
|
||||||
|
|
||||||
var parentItem = string.IsNullOrEmpty(request.ParentId) ?
|
|
||||||
(user == null ? _libraryManager.RootFolder : user.RootFolder) :
|
|
||||||
_libraryManager.GetItemById(request.ParentId);
|
|
||||||
|
|
||||||
var item = string.IsNullOrEmpty(request.ParentId) ?
|
|
||||||
user == null ? _libraryManager.RootFolder : user.RootFolder :
|
|
||||||
parentItem;
|
|
||||||
|
|
||||||
IEnumerable<BaseItem> items;
|
|
||||||
|
|
||||||
if (request.Recursive)
|
|
||||||
{
|
|
||||||
var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (user == null)
|
|
||||||
{
|
|
||||||
var result = await ((Folder)item).GetItems(GetItemsQuery(request, null)).ConfigureAwait(false);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
var userRoot = item as UserRootFolder;
|
|
||||||
|
|
||||||
if (userRoot == null)
|
|
||||||
{
|
|
||||||
var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
items = ((Folder)item).GetChildren(user, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new QueryResult<BaseItem> { Items = items.ToArray() };
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Gets items query. </summary>
|
|
||||||
/// <param name="request"> The request. </param>
|
|
||||||
/// <param name="user"> The user. </param>
|
|
||||||
/// <returns> The items query. </returns>
|
|
||||||
private InternalItemsQuery GetItemsQuery(BaseReportRequest request, User user)
|
|
||||||
{
|
|
||||||
var query = new InternalItemsQuery
|
|
||||||
{
|
|
||||||
User = user,
|
|
||||||
IsPlayed = request.IsPlayed,
|
|
||||||
MediaTypes = request.GetMediaTypes(),
|
|
||||||
IncludeItemTypes = request.GetIncludeItemTypes(),
|
|
||||||
ExcludeItemTypes = request.GetExcludeItemTypes(),
|
|
||||||
Recursive = true,
|
|
||||||
SortBy = request.GetOrderBy(),
|
|
||||||
SortOrder = request.SortOrder ?? SortOrder.Ascending,
|
|
||||||
|
|
||||||
Filter = i => ApplyAdditionalFilters(request, i, user, true, _libraryManager),
|
|
||||||
StartIndex = request.StartIndex,
|
|
||||||
IsMissing = request.IsMissing,
|
|
||||||
IsVirtualUnaired = request.IsVirtualUnaired,
|
|
||||||
IsUnaired = request.IsUnaired,
|
|
||||||
CollapseBoxSetItems = request.CollapseBoxSetItems,
|
|
||||||
NameLessThan = request.NameLessThan,
|
|
||||||
NameStartsWith = request.NameStartsWith,
|
|
||||||
NameStartsWithOrGreater = request.NameStartsWithOrGreater,
|
|
||||||
HasImdbId = request.HasImdbId,
|
|
||||||
IsYearMismatched = request.IsYearMismatched,
|
|
||||||
IsUnidentified = request.IsUnidentified,
|
|
||||||
IsPlaceHolder = request.IsPlaceHolder,
|
|
||||||
IsLocked = request.IsLocked,
|
|
||||||
IsInBoxSet = request.IsInBoxSet,
|
|
||||||
IsHD = request.IsHD,
|
|
||||||
Is3D = request.Is3D,
|
|
||||||
HasTvdbId = request.HasTvdbId,
|
|
||||||
HasTmdbId = request.HasTmdbId,
|
|
||||||
HasOverview = request.HasOverview,
|
|
||||||
HasOfficialRating = request.HasOfficialRating,
|
|
||||||
HasParentalRating = request.HasParentalRating,
|
|
||||||
HasSpecialFeature = request.HasSpecialFeature,
|
|
||||||
HasSubtitles = request.HasSubtitles,
|
|
||||||
HasThemeSong = request.HasThemeSong,
|
|
||||||
HasThemeVideo = request.HasThemeVideo,
|
|
||||||
HasTrailer = request.HasTrailer,
|
|
||||||
Tags = request.GetTags(),
|
|
||||||
OfficialRatings = request.GetOfficialRatings(),
|
|
||||||
Genres = request.GetGenres(),
|
|
||||||
Studios = request.GetStudios(),
|
|
||||||
StudioIds = request.GetStudioIds(),
|
|
||||||
Person = request.Person,
|
|
||||||
PersonIds = request.GetPersonIds(),
|
|
||||||
PersonTypes = request.GetPersonTypes(),
|
|
||||||
Years = request.GetYears(),
|
|
||||||
ImageTypes = request.GetImageTypes().ToArray(),
|
|
||||||
VideoTypes = request.GetVideoTypes().ToArray(),
|
|
||||||
AdjacentTo = request.AdjacentTo
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(request.Ids))
|
|
||||||
{
|
|
||||||
query.CollapseBoxSetItems = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var filter in request.GetFilters())
|
|
||||||
{
|
|
||||||
switch (filter)
|
|
||||||
{
|
|
||||||
case ItemFilter.Dislikes:
|
|
||||||
query.IsLiked = false;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsFavorite:
|
|
||||||
query.IsFavorite = true;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsFavoriteOrLikes:
|
|
||||||
query.IsFavoriteOrLiked = true;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsFolder:
|
|
||||||
query.IsFolder = true;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsNotFolder:
|
|
||||||
query.IsFolder = false;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsPlayed:
|
|
||||||
query.IsPlayed = true;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsRecentlyAdded:
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsResumable:
|
|
||||||
query.IsResumable = true;
|
|
||||||
break;
|
|
||||||
case ItemFilter.IsUnplayed:
|
|
||||||
query.IsPlayed = false;
|
|
||||||
break;
|
|
||||||
case ItemFilter.Likes:
|
|
||||||
query.IsLiked = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (request.HasQueryLimit)
|
|
||||||
query.Limit = request.Limit;
|
|
||||||
return query;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Applies filtering. </summary>
|
/// <summary> Applies filtering. </summary>
|
||||||
/// <param name="items"> The items. </param>
|
/// <param name="items"> The items. </param>
|
||||||
@ -401,6 +272,10 @@ namespace MediaBrowser.Api.Reports
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region [Private Methods]
|
||||||
|
|
||||||
/// <summary> Applies the additional filters. </summary>
|
/// <summary> Applies the additional filters. </summary>
|
||||||
/// <param name="request"> The request. </param>
|
/// <param name="request"> The request. </param>
|
||||||
/// <param name="i"> Zero-based index of the. </param>
|
/// <param name="i"> Zero-based index of the. </param>
|
||||||
@ -779,7 +654,7 @@ namespace MediaBrowser.Api.Reports
|
|||||||
.Select(p => p == null ? "-1" : p.Name)
|
.Select(p => p == null ? "-1" : p.Name)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
if (!(names.Any(v => _libraryManager.GetPeople(i).Select(p => p.Name).Contains(v, StringComparer.OrdinalIgnoreCase))))
|
if (!(names.Any(v => i.People.Select(p => p.Name).Contains(v, StringComparer.OrdinalIgnoreCase))))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -792,7 +667,7 @@ namespace MediaBrowser.Api.Reports
|
|||||||
|
|
||||||
if (personTypes.Length == 0)
|
if (personTypes.Length == 0)
|
||||||
{
|
{
|
||||||
if (!(_libraryManager.GetPeople(i).Any(p => string.Equals(p.Name, request.Person, StringComparison.OrdinalIgnoreCase))))
|
if (!(i.People.Any(p => string.Equals(p.Name, request.Person, StringComparison.OrdinalIgnoreCase))))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -802,7 +677,8 @@ namespace MediaBrowser.Api.Reports
|
|||||||
var types = personTypes;
|
var types = personTypes;
|
||||||
|
|
||||||
var ok = new[] { i }.Any(item =>
|
var ok = new[] { i }.Any(item =>
|
||||||
_libraryManager.GetPeople(i).Any(p =>
|
item.People != null &&
|
||||||
|
item.People.Any(p =>
|
||||||
p.Name.Equals(request.Person, StringComparison.OrdinalIgnoreCase) && (types.Contains(p.Type, StringComparer.OrdinalIgnoreCase) || types.Contains(p.Role, StringComparer.OrdinalIgnoreCase))));
|
p.Name.Equals(request.Person, StringComparison.OrdinalIgnoreCase) && (types.Contains(p.Type, StringComparer.OrdinalIgnoreCase) || types.Contains(p.Role, StringComparer.OrdinalIgnoreCase))));
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
@ -1158,5 +1034,209 @@ namespace MediaBrowser.Api.Reports
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets items query. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <param name="user"> The user. </param>
|
||||||
|
/// <returns> The items query. </returns>
|
||||||
|
private InternalItemsQuery GetItemsQuery(BaseReportRequest request, User user)
|
||||||
|
{
|
||||||
|
var query = new InternalItemsQuery
|
||||||
|
{
|
||||||
|
User = user,
|
||||||
|
IsPlayed = request.IsPlayed,
|
||||||
|
MediaTypes = request.GetMediaTypes(),
|
||||||
|
IncludeItemTypes = request.GetIncludeItemTypes(),
|
||||||
|
ExcludeItemTypes = request.GetExcludeItemTypes(),
|
||||||
|
Recursive = true,
|
||||||
|
SortBy = request.GetOrderBy(),
|
||||||
|
SortOrder = request.SortOrder ?? SortOrder.Ascending,
|
||||||
|
|
||||||
|
Filter = i => ApplyAdditionalFilters(request, i, user, true, _libraryManager),
|
||||||
|
StartIndex = request.StartIndex,
|
||||||
|
IsMissing = request.IsMissing,
|
||||||
|
IsVirtualUnaired = request.IsVirtualUnaired,
|
||||||
|
IsUnaired = request.IsUnaired,
|
||||||
|
CollapseBoxSetItems = request.CollapseBoxSetItems,
|
||||||
|
NameLessThan = request.NameLessThan,
|
||||||
|
NameStartsWith = request.NameStartsWith,
|
||||||
|
NameStartsWithOrGreater = request.NameStartsWithOrGreater,
|
||||||
|
HasImdbId = request.HasImdbId,
|
||||||
|
IsYearMismatched = request.IsYearMismatched,
|
||||||
|
IsUnidentified = request.IsUnidentified,
|
||||||
|
IsPlaceHolder = request.IsPlaceHolder,
|
||||||
|
IsLocked = request.IsLocked,
|
||||||
|
IsInBoxSet = request.IsInBoxSet,
|
||||||
|
IsHD = request.IsHD,
|
||||||
|
Is3D = request.Is3D,
|
||||||
|
HasTvdbId = request.HasTvdbId,
|
||||||
|
HasTmdbId = request.HasTmdbId,
|
||||||
|
HasOverview = request.HasOverview,
|
||||||
|
HasOfficialRating = request.HasOfficialRating,
|
||||||
|
HasParentalRating = request.HasParentalRating,
|
||||||
|
HasSpecialFeature = request.HasSpecialFeature,
|
||||||
|
HasSubtitles = request.HasSubtitles,
|
||||||
|
HasThemeSong = request.HasThemeSong,
|
||||||
|
HasThemeVideo = request.HasThemeVideo,
|
||||||
|
HasTrailer = request.HasTrailer,
|
||||||
|
Tags = request.GetTags(),
|
||||||
|
OfficialRatings = request.GetOfficialRatings(),
|
||||||
|
Genres = request.GetGenres(),
|
||||||
|
Studios = request.GetStudios(),
|
||||||
|
StudioIds = request.GetStudioIds(),
|
||||||
|
Person = request.Person,
|
||||||
|
PersonIds = request.GetPersonIds(),
|
||||||
|
PersonTypes = request.GetPersonTypes(),
|
||||||
|
Years = request.GetYears(),
|
||||||
|
ImageTypes = request.GetImageTypes().ToArray(),
|
||||||
|
VideoTypes = request.GetVideoTypes().ToArray(),
|
||||||
|
AdjacentTo = request.AdjacentTo
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(request.Ids))
|
||||||
|
{
|
||||||
|
query.CollapseBoxSetItems = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var filter in request.GetFilters())
|
||||||
|
{
|
||||||
|
switch (filter)
|
||||||
|
{
|
||||||
|
case ItemFilter.Dislikes:
|
||||||
|
query.IsLiked = false;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsFavorite:
|
||||||
|
query.IsFavorite = true;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsFavoriteOrLikes:
|
||||||
|
query.IsFavoriteOrLiked = true;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsFolder:
|
||||||
|
query.IsFolder = true;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsNotFolder:
|
||||||
|
query.IsFolder = false;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsPlayed:
|
||||||
|
query.IsPlayed = true;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsRecentlyAdded:
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsResumable:
|
||||||
|
query.IsResumable = true;
|
||||||
|
break;
|
||||||
|
case ItemFilter.IsUnplayed:
|
||||||
|
query.IsPlayed = false;
|
||||||
|
break;
|
||||||
|
case ItemFilter.Likes:
|
||||||
|
query.IsLiked = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.HasQueryLimit)
|
||||||
|
query.Limit = request.Limit;
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets query result. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> The query result. </returns>
|
||||||
|
private async Task<QueryResult<BaseItem>> GetQueryResult(BaseReportRequest request)
|
||||||
|
{
|
||||||
|
// Placeholder in case needed later
|
||||||
|
request.Recursive = true;
|
||||||
|
var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
|
||||||
|
request.Fields = "MediaSources,DateCreated,Settings,Studios,SyncInfo,ItemCounts";
|
||||||
|
|
||||||
|
var parentItem = string.IsNullOrEmpty(request.ParentId) ?
|
||||||
|
(user == null ? _libraryManager.RootFolder : user.RootFolder) :
|
||||||
|
_libraryManager.GetItemById(request.ParentId);
|
||||||
|
|
||||||
|
var item = string.IsNullOrEmpty(request.ParentId) ?
|
||||||
|
user == null ? _libraryManager.RootFolder : user.RootFolder :
|
||||||
|
parentItem;
|
||||||
|
|
||||||
|
IEnumerable<BaseItem> items;
|
||||||
|
|
||||||
|
if (request.Recursive)
|
||||||
|
{
|
||||||
|
var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
var result = await ((Folder)item).GetItems(GetItemsQuery(request, null)).ConfigureAwait(false);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
var userRoot = item as UserRootFolder;
|
||||||
|
|
||||||
|
if (userRoot == null)
|
||||||
|
{
|
||||||
|
var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)).ConfigureAwait(false);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
items = ((Folder)item).GetChildren(user, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new QueryResult<BaseItem> { Items = items.ToArray() };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets report activities. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> The report activities. </returns>
|
||||||
|
private Task<ReportResult> GetReportActivities(IReportsDownload request)
|
||||||
|
{
|
||||||
|
return Task<ReportResult>.Run(() =>
|
||||||
|
{
|
||||||
|
DateTime? minDate = string.IsNullOrWhiteSpace(request.MinDate) ?
|
||||||
|
(DateTime?)null :
|
||||||
|
DateTime.Parse(request.MinDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
|
||||||
|
var queryResult = _repo.GetActivityLogEntries(minDate, request.StartIndex, request.Limit);
|
||||||
|
//var queryResult = _activityManager.GetActivityLogEntries(minDate, request.StartIndex, request.Limit);
|
||||||
|
|
||||||
|
ReportActivitiesBuilder builder = new ReportActivitiesBuilder(_libraryManager, _userManager);
|
||||||
|
var result = builder.GetResult(queryResult, request);
|
||||||
|
result.TotalRecordCount = queryResult.TotalRecordCount;
|
||||||
|
return result;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets report result. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> The report result. </returns>
|
||||||
|
private async Task<ReportResult> GetReportResult(GetItemReport request)
|
||||||
|
{
|
||||||
|
ReportBuilder reportBuilder = new ReportBuilder(_libraryManager);
|
||||||
|
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
||||||
|
ReportResult reportResult = reportBuilder.GetResult(queryResult.Items, request);
|
||||||
|
reportResult.TotalRecordCount = queryResult.TotalRecordCount;
|
||||||
|
|
||||||
|
return reportResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets report statistic. </summary>
|
||||||
|
/// <param name="request"> The request. </param>
|
||||||
|
/// <returns> The report statistic. </returns>
|
||||||
|
private async Task<ReportStatResult> GetReportStatistic(GetReportStatistics request)
|
||||||
|
{
|
||||||
|
ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
|
||||||
|
QueryResult<BaseItem> queryResult = await GetQueryResult(request).ConfigureAwait(false);
|
||||||
|
|
||||||
|
ReportStatBuilder reportBuilder = new ReportStatBuilder(_libraryManager);
|
||||||
|
ReportStatResult reportResult = reportBuilder.GetResult(queryResult.Items, ReportHelper.GetRowType(request.IncludeItemTypes), request.TopItems ?? 5);
|
||||||
|
reportResult.TotalRecordCount = reportResult.Groups.Count();
|
||||||
|
return reportResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ namespace MediaBrowser.Api.Reports
|
|||||||
/// <seealso cref="T:MediaBrowser.Api.Reports.ReportBuilderBase"/>
|
/// <seealso cref="T:MediaBrowser.Api.Reports.ReportBuilderBase"/>
|
||||||
public class ReportStatBuilder : ReportBuilderBase
|
public class ReportStatBuilder : ReportBuilderBase
|
||||||
{
|
{
|
||||||
|
#region [Constructors]
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the MediaBrowser.Api.Reports.ReportStatBuilder class. </summary>
|
/// Initializes a new instance of the MediaBrowser.Api.Reports.ReportStatBuilder class. </summary>
|
||||||
/// <param name="libraryManager"> Manager for library. </param>
|
/// <param name="libraryManager"> Manager for library. </param>
|
||||||
@ -21,12 +23,16 @@ namespace MediaBrowser.Api.Reports
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region [Public Methods]
|
||||||
|
|
||||||
/// <summary> Gets report stat result. </summary>
|
/// <summary> Gets report stat result. </summary>
|
||||||
/// <param name="items"> The items. </param>
|
/// <param name="items"> The items. </param>
|
||||||
/// <param name="reportRowType"> Type of the report row. </param>
|
/// <param name="reportIncludeItemTypes"> List of types of the report include items. </param>
|
||||||
/// <param name="topItem"> The top item. </param>
|
/// <param name="topItem"> The top item. </param>
|
||||||
/// <returns> The report stat result. </returns>
|
/// <returns> The report stat result. </returns>
|
||||||
public ReportStatResult GetReportStatResult(BaseItem[] items, ReportViewType reportRowType, int topItem = 5)
|
public ReportStatResult GetResult(BaseItem[] items, ReportIncludeItemTypes reportIncludeItemTypes, int topItem = 5)
|
||||||
{
|
{
|
||||||
ReportStatResult result = new ReportStatResult();
|
ReportStatResult result = new ReportStatResult();
|
||||||
result = this.GetResultGenres(result, items, topItem);
|
result = this.GetResultGenres(result, items, topItem);
|
||||||
@ -37,25 +43,25 @@ namespace MediaBrowser.Api.Reports
|
|||||||
result = this.GetResultCommunityRatings(result, items, topItem);
|
result = this.GetResultCommunityRatings(result, items, topItem);
|
||||||
result = this.GetResultParentalRatings(result, items, topItem);
|
result = this.GetResultParentalRatings(result, items, topItem);
|
||||||
|
|
||||||
switch (reportRowType)
|
switch (reportIncludeItemTypes)
|
||||||
{
|
{
|
||||||
case ReportViewType.Season:
|
case ReportIncludeItemTypes.Season:
|
||||||
case ReportViewType.Series:
|
case ReportIncludeItemTypes.Series:
|
||||||
case ReportViewType.MusicAlbum:
|
case ReportIncludeItemTypes.MusicAlbum:
|
||||||
case ReportViewType.MusicArtist:
|
case ReportIncludeItemTypes.MusicArtist:
|
||||||
case ReportViewType.Game:
|
case ReportIncludeItemTypes.Game:
|
||||||
break;
|
break;
|
||||||
case ReportViewType.Movie:
|
case ReportIncludeItemTypes.Movie:
|
||||||
case ReportViewType.BoxSet:
|
case ReportIncludeItemTypes.BoxSet:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ReportViewType.Book:
|
case ReportIncludeItemTypes.Book:
|
||||||
case ReportViewType.Episode:
|
case ReportIncludeItemTypes.Episode:
|
||||||
case ReportViewType.Video:
|
case ReportIncludeItemTypes.Video:
|
||||||
case ReportViewType.MusicVideo:
|
case ReportIncludeItemTypes.MusicVideo:
|
||||||
case ReportViewType.Trailer:
|
case ReportIncludeItemTypes.Trailer:
|
||||||
case ReportViewType.Audio:
|
case ReportIncludeItemTypes.Audio:
|
||||||
case ReportViewType.BaseItem:
|
case ReportIncludeItemTypes.BaseItem:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -65,117 +71,43 @@ namespace MediaBrowser.Api.Reports
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReportStatResult GetResultGenres(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
#endregion
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
|
#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();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReportStatResult GetResultStudios(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
#endregion
|
||||||
{
|
|
||||||
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;
|
#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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReportStatResult GetResultPersons(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
/// <summary> Gets resul production locations. </summary>
|
||||||
{
|
/// <param name="result"> The result. </param>
|
||||||
List<string> t = new List<string> { PersonType.Actor, PersonType.Composer, PersonType.Director, PersonType.GuestStar, PersonType.Producer, PersonType.Writer, "Artist", "AlbumArtist" };
|
/// <param name="items"> The items. </param>
|
||||||
foreach (var item in t)
|
/// <param name="topItem"> The top item. </param>
|
||||||
{
|
/// <returns> The resul production locations. </returns>
|
||||||
this.GetGroups(result, ReportHelper.GetServerLocalizedString("Option" + item), topItem,
|
|
||||||
items.SelectMany(x => _libraryManager.GetPeople(x))
|
|
||||||
.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)
|
private ReportStatResult GetResulProductionLocations(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
||||||
{
|
{
|
||||||
this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderCountries"), topItem,
|
this.GetGroups(result, ReportHelper.GetServerLocalizedString("HeaderCountries"), topItem,
|
||||||
@ -195,20 +127,148 @@ namespace MediaBrowser.Api.Reports
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary> Gets result community ratings. </summary>
|
||||||
/// <summary> Gets the groups. </summary>
|
|
||||||
/// <param name="result"> The result. </param>
|
/// <param name="result"> The result. </param>
|
||||||
/// <param name="header"> The header. </param>
|
/// <param name="items"> The items. </param>
|
||||||
/// <param name="topItem"> The top item. </param>
|
/// <param name="topItem"> The top item. </param>
|
||||||
/// <param name="top"> The top. </param>
|
/// <returns> The result community ratings. </returns>
|
||||||
private void GetGroups(ReportStatResult result, string header, int topItem, IEnumerable<ReportStatItem> top)
|
private ReportStatResult GetResultCommunityRatings(ReportStatResult result, BaseItem[] items, int topItem = 5)
|
||||||
{
|
{
|
||||||
if (top.Count() > 0)
|
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
|
||||||
{
|
{
|
||||||
var group = new ReportStatGroup { Header = ReportStatGroup.FormatedHeader(header, topItem) };
|
Name = x.Key.ToString(),
|
||||||
group.Items.AddRange(top);
|
Value = x.Count().ToString()
|
||||||
result.Groups.Add(group);
|
})
|
||||||
}
|
);
|
||||||
}
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
var ps = items.Where(x => x.People != null && x.SupportsPeople).SelectMany(x => x.People)
|
||||||
|
.Where(n => n.Type == item)
|
||||||
|
.GroupBy(x => x.Name)
|
||||||
|
.OrderByDescending(x => x.Count())
|
||||||
|
.Take(topItem);
|
||||||
|
if (ps != null && ps.Count() > 0)
|
||||||
|
this.GetGroups(result, ReportHelper.GetServerLocalizedString("Option" + 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, 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
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1459,5 +1459,10 @@
|
|||||||
"LabelUsername": "Username:",
|
"LabelUsername": "Username:",
|
||||||
"HeaderSignUp": "Sign Up",
|
"HeaderSignUp": "Sign Up",
|
||||||
"LabelPasswordConfirm": "Password (confirm):",
|
"LabelPasswordConfirm": "Password (confirm):",
|
||||||
"ButtonAddServer": "Add Server"
|
"ButtonAddServer": "Add Server",
|
||||||
|
"HeaderOverview": "Overview",
|
||||||
|
"HeaderShortOverview": "Short Overview",
|
||||||
|
"HeaderType": "Type",
|
||||||
|
"HeaderSeverity": "Severity",
|
||||||
|
"OptionReportActivities": "Activities Log"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user