示例#1
0
        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;
        }
示例#2
0
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#8
0
        public void HeaderMetadata_HasConstantString()
        {
            var sut = new HeaderMetadata(new byte[512], 0);

            Assert.Equal("SOLTYSDB", sut.DatabaseName);
        }
示例#9
0
        /// <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);
        }
示例#10
0
		/// <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;
		}