コード例 #1
0
ファイル: TvShowsService.cs プロジェクト: mzalewski/Emby
        public object Get(GetSeasons request)
        {
            var user = _userManager.GetUserById(request.UserId);

            var series = _libraryManager.GetItemById(request.Id) as Series;

            if (series == null)
            {
                throw new ResourceNotFoundException("No series exists with Id " + request.Id);
            }

            var seasons = series.GetSeasons(user);

            if (request.IsSpecialSeason.HasValue)
            {
                var val = request.IsSpecialSeason.Value;

                seasons = seasons.Where(i => i.IsSpecialSeason == val);
            }

            seasons = FilterVirtualSeasons(request, seasons);

            // This must be the last filter
            if (!string.IsNullOrEmpty(request.AdjacentTo))
            {
                seasons = UserViewBuilder.FilterForAdjacency(seasons, request.AdjacentTo)
                          .Cast <Season>();
            }

            var dtoOptions = GetDtoOptions(request);

            var returnItems = _dtoService.GetBaseItemDtos(seasons, dtoOptions, user)
                              .ToArray();

            return(new ItemsResult
            {
                TotalRecordCount = returnItems.Length,
                Items = returnItems
            });
        }
コード例 #2
0
        public object Get(GetEpisodes request)
        {
            var user = _userManager.GetUserById(request.UserId);

            List <BaseItem> episodes;

            var dtoOptions = GetDtoOptions(_authContext, request);

            if (!string.IsNullOrWhiteSpace(request.SeasonId))
            {
                var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season;

                if (season == null)
                {
                    throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId);
                }

                episodes = season.GetEpisodes(user, dtoOptions);
            }
            else if (request.Season.HasValue)
            {
                var series = GetSeries(request.Id, user);

                if (series == null)
                {
                    throw new ResourceNotFoundException("Series not found");
                }

                var season = series.GetSeasons(user, dtoOptions).FirstOrDefault(i => i.IndexNumber == request.Season.Value);

                if (season == null)
                {
                    episodes = new List <BaseItem>();
                }
                else
                {
                    episodes = ((Season)season).GetEpisodes(user, dtoOptions);
                }
            }
            else
            {
                var series = GetSeries(request.Id, user);

                if (series == null)
                {
                    throw new ResourceNotFoundException("Series not found");
                }

                episodes = series.GetEpisodes(user, dtoOptions).ToList();
            }

            // Filter after the fact in case the ui doesn't want them
            if (request.IsMissing.HasValue)
            {
                var val = request.IsMissing.Value;
                episodes = episodes.Where(i => ((Episode)i).IsMissingEpisode == val).ToList();
            }

            if (!string.IsNullOrWhiteSpace(request.StartItemId))
            {
                episodes = episodes.SkipWhile(i => !string.Equals(i.Id.ToString("N", CultureInfo.InvariantCulture), request.StartItemId, StringComparison.OrdinalIgnoreCase)).ToList();
            }

            // This must be the last filter
            if (!string.IsNullOrEmpty(request.AdjacentTo))
            {
                episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo).ToList();
            }

            if (string.Equals(request.SortBy, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase))
            {
                episodes.Shuffle();
            }

            var returnItems = episodes;

            if (request.StartIndex.HasValue || request.Limit.HasValue)
            {
                returnItems = ApplyPaging(episodes, request.StartIndex, request.Limit).ToList();
            }

            var dtos = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user);

            return(new QueryResult <BaseItemDto>
            {
                TotalRecordCount = episodes.Count,
                Items = dtos
            });
        }
コード例 #3
0
ファイル: TvShowsController.cs プロジェクト: yodatak/jellyfin
        public ActionResult <QueryResult <BaseItemDto> > GetEpisodes(
            [FromRoute, Required] string seriesId,
            [FromQuery] Guid?userId,
            [FromQuery] string?fields,
            [FromQuery] int?season,
            [FromQuery] string?seasonId,
            [FromQuery] bool?isMissing,
            [FromQuery] string?adjacentTo,
            [FromQuery] string?startItemId,
            [FromQuery] int?startIndex,
            [FromQuery] int?limit,
            [FromQuery] bool?enableImages,
            [FromQuery] int?imageTypeLimit,
            [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes,
            [FromQuery] bool?enableUserData,
            [FromQuery] string?sortBy)
        {
            var user = userId.HasValue && !userId.Equals(Guid.Empty)
                ? _userManager.GetUserById(userId.Value)
                : null;

            List <BaseItem> episodes;

            var dtoOptions = new DtoOptions()
                             .AddItemFields(fields !)
                             .AddClientFields(Request)
                             .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes !);

            if (!string.IsNullOrWhiteSpace(seasonId)) // Season id was supplied. Get episodes by season id.
            {
                var item = _libraryManager.GetItemById(new Guid(seasonId));
                if (!(item is Season seasonItem))
                {
                    return(NotFound("No season exists with Id " + seasonId));
                }

                episodes = seasonItem.GetEpisodes(user, dtoOptions);
            }
            else if (season.HasValue) // Season number was supplied. Get episodes by season number
            {
                if (!(_libraryManager.GetItemById(seriesId) is Series series))
                {
                    return(NotFound("Series not found"));
                }

                var seasonItem = series
                                 .GetSeasons(user, dtoOptions)
                                 .FirstOrDefault(i => i.IndexNumber == season.Value);

                episodes = seasonItem == null ?
                           new List <BaseItem>()
                    : ((Season)seasonItem).GetEpisodes(user, dtoOptions);
            }
            else // No season number or season id was supplied. Returning all episodes.
            {
                if (!(_libraryManager.GetItemById(seriesId) is Series series))
                {
                    return(NotFound("Series not found"));
                }

                episodes = series.GetEpisodes(user, dtoOptions).ToList();
            }

            // Filter after the fact in case the ui doesn't want them
            if (isMissing.HasValue)
            {
                var val = isMissing.Value;
                episodes = episodes
                           .Where(i => ((Episode)i).IsMissingEpisode == val)
                           .ToList();
            }

            if (!string.IsNullOrWhiteSpace(startItemId))
            {
                episodes = episodes
                           .SkipWhile(i => !string.Equals(i.Id.ToString("N", CultureInfo.InvariantCulture), startItemId, StringComparison.OrdinalIgnoreCase))
                           .ToList();
            }

            // This must be the last filter
            if (!string.IsNullOrEmpty(adjacentTo))
            {
                episodes = UserViewBuilder.FilterForAdjacency(episodes, adjacentTo).ToList();
            }

            if (string.Equals(sortBy, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase))
            {
                episodes.Shuffle();
            }

            var returnItems = episodes;

            if (startIndex.HasValue || limit.HasValue)
            {
                returnItems = ApplyPaging(episodes, startIndex, limit).ToList();
            }

            var dtos = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user);

            return(new QueryResult <BaseItemDto>
            {
                TotalRecordCount = episodes.Count,
                Items = dtos
            });
        }
コード例 #4
0
ファイル: TvShowsService.cs プロジェクト: tnt-wolve/Emby
        public async Task <object> Get(GetEpisodes request)
        {
            var user = _userManager.GetUserById(request.UserId);

            IEnumerable <Episode> episodes;

            var dtoOptions = GetDtoOptions(_authContext, request);

            if (!string.IsNullOrWhiteSpace(request.SeasonId))
            {
                var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season;

                if (season == null)
                {
                    throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId);
                }

                episodes = season.GetEpisodes(user, dtoOptions);
            }
            else if (request.Season.HasValue)
            {
                var series = GetSeries(request.Id, user);

                if (series == null)
                {
                    throw new ResourceNotFoundException("Series not found");
                }

                var season = series.GetSeasons(user, dtoOptions).FirstOrDefault(i => i.IndexNumber == request.Season.Value);

                if (season == null)
                {
                    episodes = new List <Episode>();
                }
                else
                {
                    episodes = season.GetEpisodes(user, dtoOptions);
                }
            }
            else
            {
                var series = GetSeries(request.Id, user);

                if (series == null)
                {
                    throw new ResourceNotFoundException("Series not found");
                }

                episodes = series.GetEpisodes(user, dtoOptions);
            }

            // Filter after the fact in case the ui doesn't want them
            if (request.IsMissing.HasValue)
            {
                var val = request.IsMissing.Value;
                episodes = episodes.Where(i => i.IsMissingEpisode == val);
            }

            // Filter after the fact in case the ui doesn't want them
            if (request.IsVirtualUnaired.HasValue)
            {
                var val = request.IsVirtualUnaired.Value;
                episodes = episodes.Where(i => i.IsVirtualUnaired == val);
            }

            if (!string.IsNullOrWhiteSpace(request.StartItemId))
            {
                episodes = episodes.SkipWhile(i => !string.Equals(i.Id.ToString("N"), request.StartItemId, StringComparison.OrdinalIgnoreCase));
            }

            IEnumerable <BaseItem> returnItems = episodes;

            // This must be the last filter
            if (!string.IsNullOrEmpty(request.AdjacentTo))
            {
                returnItems = UserViewBuilder.FilterForAdjacency(returnItems, request.AdjacentTo);
            }

            var returnList = returnItems.ToList();

            var pagedItems = ApplyPaging(returnList, request.StartIndex, request.Limit);

            var dtos = (await _dtoService.GetBaseItemDtos(pagedItems, dtoOptions, user).ConfigureAwait(false))
                       .ToArray();

            return(new ItemsResult
            {
                TotalRecordCount = returnList.Count,
                Items = dtos
            });
        }
コード例 #5
0
ファイル: TvShowsService.cs プロジェクト: wilhil/MediaBrowser
        public object Get(GetEpisodes request)
        {
            var user = _userManager.GetUserById(request.UserId);

            IEnumerable <Episode> episodes;

            if (string.IsNullOrEmpty(request.SeasonId))
            {
                var series = _libraryManager.GetItemById(request.Id) as Series;

                if (series == null)
                {
                    throw new ResourceNotFoundException("No series exists with Id " + request.Id);
                }

                episodes = series.GetEpisodes(user, request.Season.Value);
            }
            else
            {
                var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season;

                if (season == null)
                {
                    throw new ResourceNotFoundException("No season exists with Id " + request.SeasonId);
                }

                episodes = season.GetEpisodes(user);
            }

            // Filter after the fact in case the ui doesn't want them
            if (request.IsMissing.HasValue)
            {
                var val = request.IsMissing.Value;
                episodes = episodes.Where(i => i.IsMissingEpisode == val);
            }

            // Filter after the fact in case the ui doesn't want them
            if (request.IsVirtualUnaired.HasValue)
            {
                var val = request.IsVirtualUnaired.Value;
                episodes = episodes.Where(i => i.IsVirtualUnaired == val);
            }

            // This must be the last filter
            if (!string.IsNullOrEmpty(request.AdjacentTo))
            {
                episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo)
                           .Cast <Episode>();
            }

            var fields = request.GetItemFields().ToList();

            episodes = _libraryManager.ReplaceVideosWithPrimaryVersions(episodes).Cast <Episode>();

            var returnItems = episodes.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
                              .ToArray();

            return(new ItemsResult
            {
                TotalRecordCount = returnItems.Length,
                Items = returnItems
            });
        }