/// <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);
        }
Exemple #2
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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
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);
        }