Exemple #1
0
        /// <summary> Gets a row. </summary>
        /// <param name="item"> The item. </param>
        /// <returns> The row. </returns>
        private ReportRow GetRow(BaseItem item)
        {
            var       hasTrailers        = item as IHasTrailers;
            var       hasSpecialFeatures = item as IHasSpecialFeatures;
            var       video = item as Video;
            ReportRow rRow  = new ReportRow
            {
                Id                   = item.Id.ToString("N"),
                HasLockData          = item.IsLocked,
                HasLocalTrailer      = hasTrailers != null?hasTrailers.GetTrailerIds().Count() > 0 : false,
                HasImageTagsPrimary  = item.ImageInfos != null && item.ImageInfos.Count(n => n.Type == ImageType.Primary) > 0,
                HasImageTagsBackdrop = item.ImageInfos != null && item.ImageInfos.Count(n => n.Type == ImageType.Backdrop) > 0,
                HasImageTagsLogo     = item.ImageInfos != null && item.ImageInfos.Count(n => n.Type == ImageType.Logo) > 0,
                HasSpecials          = hasSpecialFeatures != null ? hasSpecialFeatures.SpecialFeatureIds.Length > 0 : false,
                HasSubtitles         = video != null ? video.HasSubtitles : false,
                RowType              = ReportHelper.GetRowType(item.GetClientTypeName())
            };

            return(rRow);
        }
Exemple #2
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);
        }
Exemple #3
0
        /// <summary> Gets report statistic. </summary>
        /// <param name="request"> The request. </param>
        /// <returns> The report statistic. </returns>
        private async Task <ReportStatResult> GetReportStatistic(GetReportStatistics request)
        {
            ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
            QueryResult <BaseItem> queryResult   = await GetQueryResult(request).ConfigureAwait(false);

            ReportStatBuilder reportBuilder = new ReportStatBuilder(_libraryManager);
            ReportStatResult  reportResult  = reportBuilder.GetResult(queryResult.Items, ReportHelper.GetRowType(request.IncludeItemTypes), request.TopItems ?? 5);

            reportResult.TotalRecordCount = reportResult.Groups.Count();
            return(reportResult);
        }
Exemple #4
0
        /// <summary> Gets the given request. </summary>
        /// <param name="request"> The request. </param>
        /// <returns> A Task&lt;object&gt; </returns>
        public async Task <object> Get(GetReportDownload request)
        {
            if (string.IsNullOrEmpty(request.IncludeItemTypes))
            {
                return(null);
            }

            request.DisplayType = "Export";
            ReportViewType reportViewType = ReportHelper.GetReportViewType(request.ReportView);
            var            headers        = new Dictionary <string, string>();
            string         fileExtension  = "csv";
            string         contentType    = "text/plain;charset='utf-8'";

            switch (request.ExportType)
            {
            case ReportExportType.CSV:
                break;

            case ReportExportType.Excel:
                contentType   = "application/vnd.ms-excel";
                fileExtension = "xls";
                break;
            }

            var filename = "ReportExport." + fileExtension;

            headers["Content-Disposition"] = string.Format("attachment; filename=\"{0}\"", filename);
            headers["Content-Encoding"]    = "UTF-8";

            ReportResult result = null;

            switch (reportViewType)
            {
            case ReportViewType.ReportStatistics:
            case ReportViewType.ReportData:
                ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);
                ReportBuilder          dataBuilder   = new ReportBuilder(_libraryManager);
                QueryResult <BaseItem> queryResult   = await GetQueryResult(request).ConfigureAwait(false);

                result = dataBuilder.GetResult(queryResult.Items, request);
                result.TotalRecordCount = queryResult.TotalRecordCount;
                break;

            case ReportViewType.ReportActivities:
                result = await GetReportActivities(request).ConfigureAwait(false);

                break;
            }

            string returnResult = string.Empty;

            switch (request.ExportType)
            {
            case ReportExportType.CSV:
                returnResult = new ReportExport().ExportToCsv(result);
                break;

            case ReportExportType.Excel:
                returnResult = new ReportExport().ExportToExcel(result);
                break;
            }

            object ro = ResultFactory.GetResult(returnResult, contentType, headers);

            return(ro);
        }
Exemple #5
0
        /// <summary> Gets the headers. </summary>
        /// <typeparam name="H"> Type of the header. </typeparam>
        /// <param name="request"> The request. </param>
        /// <returns> The headers. </returns>
        /// <seealso cref="M:MediaBrowser.Api.Reports.ReportBuilderBase.GetHeaders{H}(H)"/>
        protected internal override List <ReportHeader> GetHeaders <H>(H request)
        {
            ReportIncludeItemTypes reportRowType = ReportHelper.GetRowType(request.IncludeItemTypes);

            return(this.GetHeaders <BaseItem>(request, () => this.GetDefaultHeaderMetadata(reportRowType), (hm) => this.GetOption(hm)));
        }