public GMDViewModel(string path) : base(path) { _context = new GMD(path); // Commands AddEntryCommand = new RelayCommand(AddEntry, IsUnsafeModeEnabled); AddEntryNoKeyCommand = new RelayCommand(AddEntryNoKey, IsUnsafeModeEnabled); TriggerSearchCommand = new RelayCommand(TriggerSearch, () => true); // Header metadata HeaderMetadata.Add(new KeyValueViewModel("Version", "0x" + _context.Header.Version.ToHexString())); HeaderMetadata.Add(new KeyValueViewModel("Language", _context.Header.Language.ToString())); HeaderMetadata.Add(new KeyValueViewModel("KeyCount", _context.Header.KeyCount.ToString())); HeaderMetadata.Add(new KeyValueViewModel("StringCount", _context.Header.StringCount.ToString())); HeaderMetadata.Add(new KeyValueViewModel("KeyBlockSize", _context.Header.KeyBlockSize.ToString())); HeaderMetadata.Add(new KeyValueViewModel("StringBlockSize", _context.Header.StringBlockSize.ToString())); HeaderMetadata.Add(new KeyValueViewModel("FilenameLength", _context.Header.FilenameLength.ToString())); HeaderMetadata.Add(new KeyValueViewModel("Filename", _context.Filename)); // Entries for (int i = 0; i < _context.Entries.Count; i++) { Entries.Add(new GMDEntryViewModel(i, _context.Entries[i])); } // Filtered Entries CollectionViewSource FilteredEntries = CollectionViewSource.GetDefaultView(Entries); FilteredEntries.Filter = Entries_Filter; }
public ReportResult GetReportResult(BaseItem[] items, ReportViewType reportRowType, BaseReportRequest request) { List <HeaderMetadata> headersMetadata = this.GetFilteredReportHeaderMetadata(reportRowType, request); var headers = GetReportHeaders(reportRowType, headersMetadata); var rows = GetReportRows(items, headersMetadata); ReportResult result = new ReportResult { Headers = headers }; HeaderMetadata groupBy = ReportHelper.GetHeaderMetadataType(request.GroupBy); int i = headers.FindIndex(x => x.FieldName == groupBy); if (groupBy != HeaderMetadata.None && i > 0) { var rowsGroup = rows.SelectMany(x => x.Columns[i].Name.Split(';'), (x, g) => new { Genre = g.Trim(), Rows = x }) .GroupBy(x => x.Genre) .OrderBy(x => x.Key) .Select(x => new ReportGroup { Name = x.Key, Rows = x.Select(r => r.Rows).ToList() }); result.Groups = rowsGroup.ToList(); result.IsGrouped = true; } else { result.Rows = rows; result.IsGrouped = false; } return(result); }
/// <summary> Gets localized header. </summary> /// <param name="internalHeader"> The internal header. </param> /// <returns> The localized header. </returns> protected static string GetLocalizedHeader(HeaderMetadata internalHeader) { string headerName = ""; if (internalHeader != HeaderMetadata.None) { string localHeader = "Header" + internalHeader.ToString(); headerName = ReportHelper.GetCoreLocalizedString(localHeader); } return(headerName); }
/// <summary> Gets localized header. </summary> /// <param name="internalHeader"> The internal header. </param> /// <returns> The localized header. </returns> protected static string GetLocalizedHeader(HeaderMetadata internalHeader) { if (internalHeader == HeaderMetadata.EpisodeNumber) { return("Episode"); } string headerName = ""; if (internalHeader != HeaderMetadata.None) { string localHeader = internalHeader.ToString(); headerName = ReportHelper.GetCoreLocalizedString(localHeader); } return(headerName); }
/// <summary> Gets report result. </summary> /// <param name="items"> The items. </param> /// <param name="request"> The request. </param> /// <returns> The report result. </returns> public ReportResult GetResult(BaseItem[] items, IReportsQuery request) { ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes); ReportDisplayType displayType = ReportHelper.GetReportDisplayType(request.DisplayType); List <ReportOptions <BaseItem> > options = this.GetReportOptions <BaseItem>(request, () => this.GetDefaultHeaderMetadata(reportRowType), (hm) => this.GetOption(hm)).Where(x => this.DisplayTypeVisible(x.Header.DisplayType, displayType)).ToList(); var headers = GetHeaders <BaseItem>(options); var rows = GetReportRows(items, options); ReportResult result = new ReportResult { Headers = headers }; HeaderMetadata groupBy = ReportHelper.GetHeaderMetadataType(request.GroupBy); int i = headers.FindIndex(x => x.FieldName == groupBy); if (groupBy != HeaderMetadata.None && i >= 0) { var rowsGroup = rows.SelectMany(x => x.Columns[i].Name.Split(';'), (x, g) => new { Group = g.Trim(), Rows = x }) .GroupBy(x => x.Group) .OrderBy(x => x.Key) .Select(x => new ReportGroup { Name = x.Key, Rows = x.Select(r => r.Rows).ToList() }); result.Groups = rowsGroup.ToList(); result.IsGrouped = true; } else { result.Rows = rows; result.IsGrouped = false; } return(result); }
/// <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.ToLocalTime().ToString("G"); 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); }
public void HeaderMetadata_HasConstantString() { var sut = new HeaderMetadata(new byte[512], 0); Assert.Equal("SOLTYSDB", sut.DatabaseName); }
/// <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); }
/// <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; }