/// <summary> Gets report options. </summary> /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="request"> The request. </param> /// <param name="getHeadersMetadata"> The get headers metadata. </param> /// <param name="getOptions"> Options for controlling the get. </param> /// <returns> The report options. </returns> protected List <ReportOptions <T> > GetReportOptions <T>(IReportsHeader request, Func <List <HeaderMetadata> > getHeadersMetadata, Func <HeaderMetadata, ReportOptions <T> > getOptions) { List <HeaderMetadata> headersMetadata = getHeadersMetadata(); List <ReportOptions <T> > options = new List <ReportOptions <T> >(); ReportDisplayType displayType = ReportHelper.GetReportDisplayType(request.DisplayType); foreach (HeaderMetadata header in headersMetadata) { ReportOptions <T> headerOptions = getOptions(header); if (this.DisplayTypeVisible(headerOptions.Header.DisplayType, displayType)) { options.Add(headerOptions); } } if (request != null && !string.IsNullOrEmpty(request.ReportColumns)) { List <HeaderMetadata> headersMetadataFiltered = ReportHelper.GetFilteredReportHeaderMetadata(request.ReportColumns, () => headersMetadata); foreach (ReportHeader header in options.Select(x => x.Header)) { if (this.DisplayTypeVisible(header.DisplayType, displayType)) { if (!headersMetadataFiltered.Contains(header.FieldName) && displayType != ReportDisplayType.Export) { header.DisplayType = ReportDisplayType.None; } } else { header.DisplayType = ReportDisplayType.None; } } } return(options); }
/// <summary> Gets report option. </summary> /// <param name="header"> The header. </param> /// <param name="sortField"> The sort field. </param> /// <returns> The report option. </returns> private ReportOptions <BaseItem> GetOption(HeaderMetadata header, string sortField = "") { HeaderMetadata internalHeader = header; ReportOptions <BaseItem> option = new ReportOptions <BaseItem>() { Header = new ReportHeader { HeaderFieldType = ReportFieldType.String, SortField = sortField, Type = "", ItemViewType = ItemViewType.None } }; switch (header) { case HeaderMetadata.Status: option.Header.ItemViewType = ItemViewType.StatusImage; internalHeader = HeaderMetadata.Status; option.Header.CanGroup = false; option.Header.DisplayType = ReportDisplayType.Screen; break; case HeaderMetadata.Locked: option.Column = (i, r) => this.GetBoolString(r.HasLockData); option.Header.ItemViewType = ItemViewType.LockDataImage; option.Header.CanGroup = false; option.Header.DisplayType = ReportDisplayType.Export; break; case HeaderMetadata.ImagePrimary: option.Column = (i, r) => this.GetBoolString(r.HasImageTagsPrimary); option.Header.ItemViewType = ItemViewType.TagsPrimaryImage; option.Header.CanGroup = false; option.Header.DisplayType = ReportDisplayType.Export; break; case HeaderMetadata.ImageBackdrop: option.Column = (i, r) => this.GetBoolString(r.HasImageTagsBackdrop); option.Header.ItemViewType = ItemViewType.TagsBackdropImage; option.Header.CanGroup = false; option.Header.DisplayType = ReportDisplayType.Export; break; case HeaderMetadata.ImageLogo: option.Column = (i, r) => this.GetBoolString(r.HasImageTagsLogo); option.Header.ItemViewType = ItemViewType.TagsLogoImage; option.Header.CanGroup = false; option.Header.DisplayType = ReportDisplayType.Export; break; case HeaderMetadata.Name: option.Column = (i, r) => i.Name; option.Header.ItemViewType = ItemViewType.Detail; option.Header.SortField = "SortName"; break; case HeaderMetadata.DateAdded: option.Column = (i, r) => i.DateCreated; option.Header.SortField = "DateCreated,SortName"; option.Header.HeaderFieldType = ReportFieldType.DateTime; option.Header.Type = ""; break; case HeaderMetadata.PremiereDate: case HeaderMetadata.ReleaseDate: option.Column = (i, r) => i.PremiereDate; option.Header.HeaderFieldType = ReportFieldType.DateTime; option.Header.SortField = "ProductionYear,PremiereDate,SortName"; break; case HeaderMetadata.Runtime: option.Column = (i, r) => this.GetRuntimeDateTime(i.RunTimeTicks); option.Header.HeaderFieldType = ReportFieldType.Minutes; option.Header.SortField = "Runtime,SortName"; break; case HeaderMetadata.PlayCount: option.Header.HeaderFieldType = ReportFieldType.Int; break; case HeaderMetadata.Season: option.Column = (i, r) => this.GetEpisode(i); option.Header.ItemViewType = ItemViewType.Detail; option.Header.SortField = "SortName"; break; case HeaderMetadata.SeasonNumber: option.Column = (i, r) => this.GetObject <Season, string>(i, (x) => x.IndexNumber == null ? "" : x.IndexNumber.ToString()); option.Header.SortField = "IndexNumber"; option.Header.HeaderFieldType = ReportFieldType.Int; break; case HeaderMetadata.Series: option.Column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); option.Header.ItemViewType = ItemViewType.Detail; option.Header.SortField = "SeriesSortName,SortName"; break; case HeaderMetadata.EpisodeSeries: option.Column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); option.Header.ItemViewType = ItemViewType.Detail; option.ItemID = (i) => { Series series = this.GetObject <Episode, Series>(i, (x) => x.Series); if (series == null) { return(string.Empty); } return(series.Id); }; option.Header.SortField = "SeriesSortName,SortName"; internalHeader = HeaderMetadata.Series; break; case HeaderMetadata.EpisodeSeason: option.Column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); option.Header.ItemViewType = ItemViewType.Detail; option.ItemID = (i) => { Season season = this.GetObject <Episode, Season>(i, (x) => x.Season); if (season == null) { return(string.Empty); } return(season.Id); }; option.Header.SortField = "SortName"; internalHeader = HeaderMetadata.Season; break; case HeaderMetadata.EpisodeNumber: option.Column = (i, r) => this.GetObject <BaseItem, string>(i, (x) => x.IndexNumber == null ? "" : x.IndexNumber.ToString()); //option.Header.SortField = "IndexNumber"; //option.Header.HeaderFieldType = ReportFieldType.Int; break; case HeaderMetadata.Network: option.Column = (i, r) => this.GetListAsString(i.Studios.ToList()); option.ItemID = (i) => this.GetStudioID(i.Studios.FirstOrDefault()); option.Header.ItemViewType = ItemViewType.ItemByNameDetails; option.Header.SortField = "Studio,SortName"; break; case HeaderMetadata.Year: option.Column = (i, r) => this.GetSeriesProductionYear(i); option.Header.SortField = "ProductionYear,PremiereDate,SortName"; break; case HeaderMetadata.ParentalRating: option.Column = (i, r) => i.OfficialRating; option.Header.SortField = "OfficialRating,SortName"; break; case HeaderMetadata.CommunityRating: option.Column = (i, r) => i.CommunityRating; option.Header.SortField = "CommunityRating,SortName"; break; case HeaderMetadata.Trailers: option.Column = (i, r) => this.GetBoolString(r.HasLocalTrailer); option.Header.ItemViewType = ItemViewType.TrailersImage; break; case HeaderMetadata.Specials: option.Column = (i, r) => this.GetBoolString(r.HasSpecials); option.Header.ItemViewType = ItemViewType.SpecialsImage; break; case HeaderMetadata.GameSystem: option.Column = (i, r) => this.GetObject <Game, string>(i, (x) => x.GameSystem); option.Header.SortField = "GameSystem,SortName"; break; case HeaderMetadata.Players: option.Column = (i, r) => this.GetObject <Game, int?>(i, (x) => x.PlayersSupported); option.Header.SortField = "Players,GameSystem,SortName"; break; case HeaderMetadata.AlbumArtist: option.Column = (i, r) => this.GetObject <MusicAlbum, string>(i, (x) => x.AlbumArtist); option.ItemID = (i) => this.GetPersonID(this.GetObject <MusicAlbum, string>(i, (x) => x.AlbumArtist)); option.Header.ItemViewType = ItemViewType.Detail; option.Header.SortField = "AlbumArtist,Album,SortName"; break; case HeaderMetadata.MusicArtist: option.Column = (i, r) => this.GetObject <MusicArtist, string>(i, (x) => x.GetLookupInfo().Name); option.Header.ItemViewType = ItemViewType.Detail; option.Header.SortField = "AlbumArtist,Album,SortName"; internalHeader = HeaderMetadata.AlbumArtist; break; case HeaderMetadata.AudioAlbumArtist: option.Column = (i, r) => this.GetListAsString(this.GetObject <Audio, List <string> >(i, (x) => x.AlbumArtists.ToList())); option.Header.SortField = "AlbumArtist,Album,SortName"; internalHeader = HeaderMetadata.AlbumArtist; break; case HeaderMetadata.AudioAlbum: option.Column = (i, r) => this.GetObject <Audio, string>(i, (x) => x.Album); option.Header.SortField = "Album,SortName"; internalHeader = HeaderMetadata.Album; break; case HeaderMetadata.Disc: option.Column = (i, r) => i.ParentIndexNumber; break; case HeaderMetadata.Track: option.Column = (i, r) => i.IndexNumber; break; case HeaderMetadata.Tracks: option.Column = (i, r) => this.GetObject <MusicAlbum, List <Audio> >(i, (x) => x.Tracks.ToList(), new List <Audio>()).Count(); break; case HeaderMetadata.Audio: option.Column = (i, r) => this.GetAudioStream(i); break; case HeaderMetadata.EmbeddedImage: break; case HeaderMetadata.Video: option.Column = (i, r) => this.GetVideoStream(i); break; case HeaderMetadata.Resolution: option.Column = (i, r) => this.GetVideoResolution(i); break; case HeaderMetadata.Subtitles: option.Column = (i, r) => this.GetBoolString(r.HasSubtitles); option.Header.ItemViewType = ItemViewType.SubtitleImage; break; case HeaderMetadata.Genres: option.Column = (i, r) => this.GetListAsString(i.Genres); break; } option.Header.Name = GetLocalizedHeader(internalHeader); option.Header.FieldName = header; return(option); }
/// <summary> Gets an option. </summary> /// <param name="header"> The header. </param> /// <param name="sortField"> The sort field. </param> /// <returns> The option. </returns> private ReportOptions <ActivityLogEntry> GetOption(HeaderMetadata header, string sortField = "") { HeaderMetadata internalHeader = header; ReportOptions <ActivityLogEntry> option = new ReportOptions <ActivityLogEntry>() { Header = new ReportHeader { HeaderFieldType = ReportFieldType.String, SortField = sortField, Type = "", ItemViewType = ItemViewType.None } }; switch (header) { case HeaderMetadata.Name: option.Column = (i, r) => i.Name; option.Header.SortField = ""; break; case HeaderMetadata.Overview: option.Column = (i, r) => i.Overview; option.Header.SortField = ""; option.Header.CanGroup = false; break; case HeaderMetadata.ShortOverview: option.Column = (i, r) => i.ShortOverview; option.Header.SortField = ""; option.Header.CanGroup = false; break; case HeaderMetadata.Type: option.Column = (i, r) => i.Type; option.Header.SortField = ""; break; case HeaderMetadata.Date: option.Column = (i, r) => i.Date; option.Header.SortField = ""; option.Header.HeaderFieldType = ReportFieldType.DateTime; option.Header.Type = ""; break; case HeaderMetadata.UserPrimaryImage: //option.Column = (i, r) => i.UserPrimaryImageTag; option.Header.DisplayType = ReportDisplayType.Screen; option.Header.ItemViewType = ItemViewType.UserPrimaryImage; option.Header.ShowHeaderLabel = false; internalHeader = HeaderMetadata.User; option.Header.CanGroup = false; option.Column = (i, r) => { if (!string.IsNullOrEmpty(i.UserId)) { MediaBrowser.Controller.Entities.User user = _userManager.GetUserById(i.UserId); if (user != null) { var dto = _userManager.GetUserDto(user); return(dto.PrimaryImageTag); } } return(string.Empty); }; option.Header.SortField = ""; break; case HeaderMetadata.Severity: option.Column = (i, r) => i.Severity; option.Header.SortField = ""; break; case HeaderMetadata.Item: option.Column = (i, r) => i.ItemId; option.Header.SortField = ""; break; case HeaderMetadata.User: option.Column = (i, r) => { if (!string.IsNullOrEmpty(i.UserId)) { MediaBrowser.Controller.Entities.User user = _userManager.GetUserById(i.UserId); if (user != null) { return(user.Name); } } return(string.Empty); }; option.Header.SortField = ""; break; case HeaderMetadata.UserId: option.Column = (i, r) => i.UserId; option.Header.SortField = ""; break; } option.Header.Name = GetLocalizedHeader(internalHeader); option.Header.FieldName = header; return(option); }
/// <summary> Gets report option. </summary> /// <param name="header"> The header. </param> /// <param name="sortField"> The sort field. </param> /// <returns> The report option. </returns> private ReportOptions <BaseItem> GetReportOption(HeaderMetadata header, string sortField = "") { ReportHeader reportHeader = new ReportHeader { HeaderFieldType = ReportFieldType.String, SortField = sortField, Type = "", ItemViewType = ItemViewType.None }; Func <BaseItem, ReportRow, object> column = null; Func <BaseItem, object> itemId = null; HeaderMetadata internalHeader = header; switch (header) { case HeaderMetadata.StatusImage: reportHeader.ItemViewType = ItemViewType.StatusImage; internalHeader = HeaderMetadata.Status; reportHeader.CanGroup = false; break; case HeaderMetadata.Name: column = (i, r) => i.Name; reportHeader.ItemViewType = ItemViewType.Detail; reportHeader.SortField = "SortName"; break; case HeaderMetadata.DateAdded: column = (i, r) => i.DateCreated; reportHeader.SortField = "DateCreated,SortName"; reportHeader.HeaderFieldType = ReportFieldType.DateTime; reportHeader.Type = ""; break; case HeaderMetadata.PremiereDate: case HeaderMetadata.ReleaseDate: column = (i, r) => i.PremiereDate; reportHeader.HeaderFieldType = ReportFieldType.DateTime; reportHeader.SortField = "ProductionYear,PremiereDate,SortName"; break; case HeaderMetadata.Runtime: column = (i, r) => this.GetRuntimeDateTime(i.RunTimeTicks); reportHeader.HeaderFieldType = ReportFieldType.Minutes; reportHeader.SortField = "Runtime,SortName"; break; case HeaderMetadata.PlayCount: reportHeader.HeaderFieldType = ReportFieldType.Int; break; case HeaderMetadata.Season: column = (i, r) => this.GetEpisode(i); reportHeader.ItemViewType = ItemViewType.Detail; reportHeader.SortField = "SortName"; break; case HeaderMetadata.SeasonNumber: column = (i, r) => this.GetObject <Season, string>(i, (x) => x.IndexNumber == null ? "" : x.IndexNumber.ToString()); reportHeader.SortField = "IndexNumber"; reportHeader.HeaderFieldType = ReportFieldType.Int; break; case HeaderMetadata.Series: column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); reportHeader.ItemViewType = ItemViewType.Detail; reportHeader.SortField = "SeriesSortName,SortName"; break; case HeaderMetadata.EpisodeSeries: column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); reportHeader.ItemViewType = ItemViewType.Detail; itemId = (i) => { Series series = this.GetObject <Episode, Series>(i, (x) => x.Series); if (series == null) { return(string.Empty); } return(series.Id); }; reportHeader.SortField = "SeriesSortName,SortName"; internalHeader = HeaderMetadata.Series; break; case HeaderMetadata.EpisodeSeason: column = (i, r) => this.GetObject <IHasSeries, string>(i, (x) => x.SeriesName); reportHeader.ItemViewType = ItemViewType.Detail; itemId = (i) => { Season season = this.GetObject <Episode, Season>(i, (x) => x.Season); if (season == null) { return(string.Empty); } return(season.Id); }; reportHeader.SortField = "SortName"; internalHeader = HeaderMetadata.Season; break; case HeaderMetadata.Network: column = (i, r) => this.GetListAsString(i.Studios); itemId = (i) => this.GetStudioID(i.Studios.FirstOrDefault()); reportHeader.ItemViewType = ItemViewType.ItemByNameDetails; reportHeader.SortField = "Studio,SortName"; break; case HeaderMetadata.Year: column = (i, r) => this.GetSeriesProductionYear(i); reportHeader.SortField = "ProductionYear,PremiereDate,SortName"; break; case HeaderMetadata.ParentalRating: column = (i, r) => i.OfficialRating; reportHeader.SortField = "OfficialRating,SortName"; break; case HeaderMetadata.CommunityRating: column = (i, r) => i.CommunityRating; reportHeader.SortField = "CommunityRating,SortName"; break; case HeaderMetadata.Trailers: column = (i, r) => this.GetBoolString(r.HasLocalTrailer); reportHeader.ItemViewType = ItemViewType.TrailersImage; break; case HeaderMetadata.Specials: column = (i, r) => this.GetBoolString(r.HasSpecials); reportHeader.ItemViewType = ItemViewType.SpecialsImage; break; case HeaderMetadata.GameSystem: column = (i, r) => this.GetObject <Game, string>(i, (x) => x.GameSystem); reportHeader.SortField = "GameSystem,SortName"; break; case HeaderMetadata.Players: column = (i, r) => this.GetObject <Game, int?>(i, (x) => x.PlayersSupported); reportHeader.SortField = "Players,GameSystem,SortName"; break; case HeaderMetadata.AlbumArtist: column = (i, r) => this.GetObject <MusicAlbum, string>(i, (x) => x.AlbumArtist); itemId = (i) => this.GetPersonID(this.GetObject <MusicAlbum, string>(i, (x) => x.AlbumArtist)); reportHeader.ItemViewType = ItemViewType.Detail; reportHeader.SortField = "AlbumArtist,Album,SortName"; break; case HeaderMetadata.MusicArtist: column = (i, r) => this.GetObject <MusicArtist, string>(i, (x) => x.GetLookupInfo().Name); reportHeader.ItemViewType = ItemViewType.Detail; reportHeader.SortField = "AlbumArtist,Album,SortName"; internalHeader = HeaderMetadata.AlbumArtist; break; case HeaderMetadata.AudioAlbumArtist: column = (i, r) => this.GetListAsString(this.GetObject <Audio, List <string> >(i, (x) => x.AlbumArtists)); reportHeader.SortField = "AlbumArtist,Album,SortName"; internalHeader = HeaderMetadata.AlbumArtist; break; case HeaderMetadata.AudioAlbum: column = (i, r) => this.GetObject <Audio, string>(i, (x) => x.Album); reportHeader.SortField = "Album,SortName"; internalHeader = HeaderMetadata.Album; break; case HeaderMetadata.Countries: column = (i, r) => this.GetListAsString(this.GetObject <IHasProductionLocations, List <string> >(i, (x) => x.ProductionLocations)); break; case HeaderMetadata.Disc: column = (i, r) => i.ParentIndexNumber; break; case HeaderMetadata.Track: column = (i, r) => i.IndexNumber; break; case HeaderMetadata.Tracks: column = (i, r) => this.GetObject <MusicAlbum, List <Audio> >(i, (x) => x.Tracks.ToList(), new List <Audio>()).Count(); break; case HeaderMetadata.Audio: column = (i, r) => this.GetAudioStream(i); break; case HeaderMetadata.EmbeddedImage: break; case HeaderMetadata.Video: column = (i, r) => this.GetVideoStream(i); break; case HeaderMetadata.Resolution: column = (i, r) => this.GetVideoResolution(i); break; case HeaderMetadata.Subtitles: column = (i, r) => this.GetBoolString(r.HasSubtitles); reportHeader.ItemViewType = ItemViewType.SubtitleImage; break; case HeaderMetadata.Genres: column = (i, r) => this.GetListAsString(i.Genres); break; } string headerName = ""; if (internalHeader != HeaderMetadata.None) { string localHeader = "Header" + internalHeader.ToString(); headerName = internalHeader != HeaderMetadata.None ? ReportHelper.GetJavaScriptLocalizedString(localHeader) : ""; if (string.Compare(localHeader, headerName, StringComparison.CurrentCultureIgnoreCase) == 0) { headerName = ReportHelper.GetServerLocalizedString(localHeader); } } reportHeader.Name = headerName; reportHeader.FieldName = header; ReportOptions <BaseItem> option = new ReportOptions <BaseItem>() { Header = reportHeader, Column = column, ItemID = itemId }; return(option); }