Exemple #1
0
        private PagingResource<EpisodeResource> GetMissingEpisodes(PagingResource<EpisodeResource> pagingResource)
        {
            var pagingSpec = new PagingSpec<Episode>
            {
                Page = pagingResource.Page,
                PageSize = pagingResource.PageSize,
                SortKey = pagingResource.SortKey,
                SortDirection = pagingResource.SortDirection
            };

            if (pagingResource.FilterKey == "monitored" && pagingResource.FilterValue == "false")
            {
                pagingSpec.FilterExpression = v => v.Monitored == false || v.Series.Monitored == false;
            }
            else
            {
                pagingSpec.FilterExpression = v => v.Monitored == true && v.Series.Monitored == true;
            }

            PagingResource<EpisodeResource> resource = ApplyToPage(v => _episodeService.EpisodesWithoutFiles(v), pagingSpec);

            resource.Records = resource.Records.LoadSubtype(e => e.SeriesId, _seriesRepository).ToList();

            return resource;
        }
        public void should_convert_descending_to_desc()
        {
            var pagingSpec = new PagingSpec<Episode>
            {
                Page = 1,
                PageSize = 10,
                SortDirection = SortDirection.Descending,
                SortKey = "AirDate"
            };

            pagingSpec.ToSortDirection().Should().Be(Marr.Data.QGen.SortDirection.Desc);
        }
        public void should_calcuate_expected_offset(int page, int pageSize, int expected)
        {
            var pagingSpec = new PagingSpec<Episode>
                {
                    Page = page,
                    PageSize = pageSize,
                    SortDirection = SortDirection.Ascending,
                    SortKey = "AirDate"
                };

            pagingSpec.PagingOffset().Should().Be(expected);
        }
        public PagingSpec<Episode> EpisodesWhereCutoffUnmet(PagingSpec<Episode> pagingSpec)
        {
            var qualitiesBelowCutoff = new List<QualitiesBelowCutoff>();
            var qualityProfiles = _qualityProfileService.All();
            
            //Get all items less than the cutoff
            foreach (var qualityProfile in qualityProfiles)
            {
                var cutoffIndex = qualityProfile.Items.FindIndex(v => v.Quality == qualityProfile.Cutoff);
                var belowCutoff = qualityProfile.Items.Take(cutoffIndex).ToList();

                if (belowCutoff.Any())
                {
                    qualitiesBelowCutoff.Add(new QualitiesBelowCutoff(qualityProfile.Id, belowCutoff.Select(i => i.Quality.Id)));
                }
            }

            return _episodeRepository.EpisodesWhereCutoffUnmet(pagingSpec, qualitiesBelowCutoff, false);
        }
Exemple #5
0
        private PagingResource<EpisodeResource> GetCutoffUnmetEpisodes(PagingResource<EpisodeResource> pagingResource)
        {
            var pagingSpec = new PagingSpec<Episode>
            {
                Page = pagingResource.Page,
                PageSize = pagingResource.PageSize,
                SortKey = pagingResource.SortKey,
                SortDirection = pagingResource.SortDirection
            };

            if (pagingResource.FilterKey == "monitored" && pagingResource.FilterValue == "false")
            {
                pagingSpec.FilterExpression = v => v.Monitored == false || v.Series.Monitored == false;
            }
            else
            {
                pagingSpec.FilterExpression = v => v.Monitored == true && v.Series.Monitored == true;
            }

            PagingResource<EpisodeResource> resource = ApplyToPage(_episodeCutoffService.EpisodesWhereCutoffUnmet, pagingSpec);

            return resource;
        }
Exemple #6
0
        public PagingSpec <Episode> EpisodesWithoutFiles(PagingSpec <Episode> pagingSpec)
        {
            var episodeResult = _episodeRepository.EpisodesWithoutFiles(pagingSpec, false);

            return(episodeResult);
        }
        protected override SortBuilder <Blocklist> GetPagedQuery(QueryBuilder <Blocklist> query, PagingSpec <Blocklist> pagingSpec)
        {
            var baseQuery = query.Join <Blocklist, Series>(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id);

            return(base.GetPagedQuery(baseQuery, pagingSpec));
        }
        public void Setup()
        {
            var profile = new QualityProfile
            {
                Id     = 1,
                Cutoff = Quality.WEBDL480p.Id,
                Items  = new List <QualityProfileQualityItem>
                {
                    new QualityProfileQualityItem {
                        Allowed = true, Quality = Quality.SDTV
                    },
                    new QualityProfileQualityItem {
                        Allowed = true, Quality = Quality.WEBDL480p
                    },
                    new QualityProfileQualityItem {
                        Allowed = true, Quality = Quality.RAWHD
                    }
                }
            };

            var langProfile = new LanguageProfile
            {
                Id        = 1,
                Languages = Languages.LanguageFixture.GetDefaultLanguages(),
                Cutoff    = Language.Spanish
            };

            _monitoredSeries = Builder <Series> .CreateNew()
                               .With(s => s.TvRageId          = RandomNumber)
                               .With(s => s.Runtime           = 30)
                               .With(s => s.Monitored         = true)
                               .With(s => s.TitleSlug         = "Title3")
                               .With(s => s.QualityProfileId  = profile.Id)
                               .With(s => s.LanguageProfileId = langProfile.Id)
                               .BuildNew();

            _unmonitoredSeries = Builder <Series> .CreateNew()
                                 .With(s => s.TvdbId            = RandomNumber)
                                 .With(s => s.Runtime           = 30)
                                 .With(s => s.Monitored         = false)
                                 .With(s => s.TitleSlug         = "Title2")
                                 .With(s => s.QualityProfileId  = profile.Id)
                                 .With(s => s.LanguageProfileId = langProfile.Id)
                                 .BuildNew();

            _monitoredSeries.Id   = Db.Insert(_monitoredSeries).Id;
            _unmonitoredSeries.Id = Db.Insert(_unmonitoredSeries).Id;

            _pagingSpec = new PagingSpec <Episode>
            {
                Page          = 1,
                PageSize      = 10,
                SortKey       = "AirDate",
                SortDirection = SortDirection.Ascending
            };

            _qualitiesBelowCutoff = new List <QualitiesBelowCutoff>
            {
                new QualitiesBelowCutoff(profile.Id, new[] { Quality.SDTV.Id })
            };

            _languagesBelowCutoff = new List <LanguagesBelowCutoff>
            {
                new LanguagesBelowCutoff(profile.Id, new[] { Language.English.Id })
            };

            var qualityMetLanguageUnmet = new EpisodeFile {
                RelativePath = "a", Quality = new QualityModel {
                    Quality = Quality.WEBDL480p
                }, Language = Language.English
            };
            var qualityMetLanguageMet = new EpisodeFile {
                RelativePath = "b", Quality = new QualityModel {
                    Quality = Quality.WEBDL480p
                }, Language = Language.Spanish
            };
            var qualityMetLanguageExceed = new EpisodeFile {
                RelativePath = "c", Quality = new QualityModel {
                    Quality = Quality.WEBDL480p
                }, Language = Language.French
            };
            var qualityUnmetLanguageUnmet = new EpisodeFile {
                RelativePath = "d", Quality = new QualityModel {
                    Quality = Quality.SDTV
                }, Language = Language.English
            };
            var qualityUnmetLanguageMet = new EpisodeFile {
                RelativePath = "e", Quality = new QualityModel {
                    Quality = Quality.SDTV
                }, Language = Language.Spanish
            };
            var qualityUnmetLanguageExceed = new EpisodeFile {
                RelativePath = "f", Quality = new QualityModel {
                    Quality = Quality.SDTV
                }, Language = Language.French
            };
            var qualityRawHDLanguageUnmet = new EpisodeFile {
                RelativePath = "g", Quality = new QualityModel {
                    Quality = Quality.RAWHD
                }, Language = Language.English
            };
            var qualityRawHDLanguageMet = new EpisodeFile {
                RelativePath = "h", Quality = new QualityModel {
                    Quality = Quality.RAWHD
                }, Language = Language.Spanish
            };
            var qualityRawHDLanguageExceed = new EpisodeFile {
                RelativePath = "i", Quality = new QualityModel {
                    Quality = Quality.RAWHD
                }, Language = Language.French
            };

            MediaFileRepository fileRepository = Mocker.Resolve <MediaFileRepository>();

            qualityMetLanguageUnmet    = fileRepository.Insert(qualityMetLanguageUnmet);
            qualityMetLanguageMet      = fileRepository.Insert(qualityMetLanguageMet);
            qualityMetLanguageExceed   = fileRepository.Insert(qualityMetLanguageExceed);
            qualityUnmetLanguageUnmet  = fileRepository.Insert(qualityUnmetLanguageUnmet);
            qualityUnmetLanguageMet    = fileRepository.Insert(qualityUnmetLanguageMet);
            qualityUnmetLanguageExceed = fileRepository.Insert(qualityUnmetLanguageExceed);
            qualityRawHDLanguageUnmet  = fileRepository.Insert(qualityRawHDLanguageUnmet);
            qualityRawHDLanguageMet    = fileRepository.Insert(qualityRawHDLanguageMet);
            qualityRawHDLanguageExceed = fileRepository.Insert(qualityRawHDLanguageExceed);

            var monitoredSeriesEpisodes = Builder <Episode> .CreateListOfSize(4)
                                          .All()
                                          .With(e => e.Id            = 0)
                                          .With(e => e.SeriesId      = _monitoredSeries.Id)
                                          .With(e => e.AirDateUtc    = DateTime.Now.AddDays(-5))
                                          .With(e => e.Monitored     = true)
                                          .With(e => e.EpisodeFileId = qualityUnmetLanguageUnmet.Id)
                                          .TheFirst(1)
                                          .With(e => e.Monitored     = false)
                                          .With(e => e.EpisodeFileId = qualityMetLanguageMet.Id)
                                          .TheNext(1)
                                          .With(e => e.EpisodeFileId = qualityRawHDLanguageExceed.Id)
                                          .TheLast(1)
                                          .With(e => e.SeasonNumber = 0)
                                          .Build();

            var unmonitoredSeriesEpisodes = Builder <Episode> .CreateListOfSize(3)
                                            .All()
                                            .With(e => e.Id            = 0)
                                            .With(e => e.SeriesId      = _unmonitoredSeries.Id)
                                            .With(e => e.AirDateUtc    = DateTime.Now.AddDays(-5))
                                            .With(e => e.Monitored     = true)
                                            .With(e => e.EpisodeFileId = qualityRawHDLanguageUnmet.Id)
                                            .TheFirst(1)
                                            .With(e => e.Monitored     = false)
                                            .With(e => e.EpisodeFileId = qualityMetLanguageMet.Id)
                                            .TheLast(1)
                                            .With(e => e.SeasonNumber = 0)
                                            .Build();


            _unairedEpisodes = Builder <Episode> .CreateListOfSize(1)
                               .All()
                               .With(e => e.Id            = 0)
                               .With(e => e.SeriesId      = _monitoredSeries.Id)
                               .With(e => e.AirDateUtc    = DateTime.Now.AddDays(5))
                               .With(e => e.Monitored     = true)
                               .With(e => e.EpisodeFileId = qualityUnmetLanguageUnmet.Id)
                               .Build()
                               .ToList();

            Db.InsertMany(monitoredSeriesEpisodes);
            Db.InsertMany(unmonitoredSeriesEpisodes);
        }
        protected override SortBuilder <History> GetPagedQuery(QueryBuilder <History> query, PagingSpec <History> pagingSpec)
        {
            var baseQuery = query.Join <History, Movie>(JoinType.Inner, h => h.Movie, (h, e) => h.MovieId == e.Id);

            return(base.GetPagedQuery(baseQuery, pagingSpec));
        }
Exemple #10
0
 public PagingSpec <Movie> Paged(PagingSpec <Movie> pagingSpec)
 {
     return(_movieRepository.GetPaged(pagingSpec));
 }
Exemple #11
0
        private PagingSpec <NzbDrone.Core.Queue.Queue> GetQueue(PagingSpec <NzbDrone.Core.Queue.Queue> pagingSpec, bool includeUnknownMovieItems)
        {
            var ascending   = pagingSpec.SortDirection == SortDirection.Ascending;
            var orderByFunc = GetOrderByFunc(pagingSpec);

            var queue         = _queueService.GetQueue();
            var filteredQueue = includeUnknownMovieItems ? queue : queue.Where(q => q.Movie != null);
            var pending       = _pendingReleaseService.GetPendingQueue();
            var fullQueue     = filteredQueue.Concat(pending).ToList();
            IOrderedEnumerable <NzbDrone.Core.Queue.Queue> ordered;

            if (pagingSpec.SortKey == "timeleft")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.Timeleft, new TimeleftComparer())
                    : fullQueue.OrderByDescending(q => q.Timeleft, new TimeleftComparer());
            }
            else if (pagingSpec.SortKey == "estimatedCompletionTime")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.EstimatedCompletionTime, new EstimatedCompletionTimeComparer())
                    : fullQueue.OrderByDescending(q => q.EstimatedCompletionTime,
                                                  new EstimatedCompletionTimeComparer());
            }
            else if (pagingSpec.SortKey == "protocol")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.Protocol)
                    : fullQueue.OrderByDescending(q => q.Protocol);
            }
            else if (pagingSpec.SortKey == "indexer")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.Indexer, StringComparer.InvariantCultureIgnoreCase)
                    : fullQueue.OrderByDescending(q => q.Indexer, StringComparer.InvariantCultureIgnoreCase);
            }
            else if (pagingSpec.SortKey == "downloadClient")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.DownloadClient, StringComparer.InvariantCultureIgnoreCase)
                    : fullQueue.OrderByDescending(q => q.DownloadClient, StringComparer.InvariantCultureIgnoreCase);
            }
            else if (pagingSpec.SortKey == "quality")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.Quality, _qualityComparer)
                    : fullQueue.OrderByDescending(q => q.Quality, _qualityComparer);
            }
            else if (pagingSpec.SortKey == "languages")
            {
                ordered = ascending
                    ? fullQueue.OrderBy(q => q.Languages, new LanguagesComparer())
                    : fullQueue.OrderByDescending(q => q.Languages, new LanguagesComparer());
            }
            else
            {
                ordered = ascending ? fullQueue.OrderBy(orderByFunc) : fullQueue.OrderByDescending(orderByFunc);
            }

            ordered = ordered.ThenByDescending(q => q.Size == 0 ? 0 : 100 - (q.Sizeleft / q.Size * 100));

            pagingSpec.Records      = ordered.Skip((pagingSpec.Page - 1) * pagingSpec.PageSize).Take(pagingSpec.PageSize).ToList();
            pagingSpec.TotalRecords = fullQueue.Count;

            if (pagingSpec.Records.Empty() && pagingSpec.Page > 1)
            {
                pagingSpec.Page    = (int)Math.Max(Math.Ceiling((decimal)(pagingSpec.TotalRecords / pagingSpec.PageSize)), 1);
                pagingSpec.Records = ordered.Skip((pagingSpec.Page - 1) * pagingSpec.PageSize).Take(pagingSpec.PageSize).ToList();
            }

            return(pagingSpec);
        }
Exemple #12
0
        public PagingSpec <Movie> MoviesWithoutFiles(PagingSpec <Movie> pagingSpec)
        {
            var movieResult = _movieRepository.MoviesWithoutFiles(pagingSpec);

            return(movieResult);
        }
Exemple #13
0
        public PagingSpec <Album> AlbumsWithoutFiles(PagingSpec <Album> pagingSpec)
        {
            var albumResult = _albumRepository.AlbumsWithoutFiles(pagingSpec);

            return(albumResult);
        }
        public void Setup()
        {
            _monitoredSeries = Builder <Series> .CreateNew()
                               .With(s => s.Id        = 0)
                               .With(s => s.TvRageId  = RandomNumber)
                               .With(s => s.Runtime   = 30)
                               .With(s => s.Monitored = true)
                               .With(s => s.TitleSlug = "Title3")
                               .Build();

            _unmonitoredSeries = Builder <Series> .CreateNew()
                                 .With(s => s.Id        = 0)
                                 .With(s => s.TvdbId    = RandomNumber)
                                 .With(s => s.Runtime   = 30)
                                 .With(s => s.Monitored = false)
                                 .With(s => s.TitleSlug = "Title2")
                                 .Build();

            _monitoredSeries.Id   = Db.Insert(_monitoredSeries).Id;
            _unmonitoredSeries.Id = Db.Insert(_unmonitoredSeries).Id;

            _pagingSpec = new PagingSpec <Episode>
            {
                Page          = 1,
                PageSize      = 10,
                SortKey       = "AirDate",
                SortDirection = SortDirection.Ascending
            };

            var monitoredSeriesEpisodes = Builder <Episode> .CreateListOfSize(3)
                                          .All()
                                          .With(e => e.Id            = 0)
                                          .With(e => e.SeriesId      = _monitoredSeries.Id)
                                          .With(e => e.EpisodeFileId = 0)
                                          .With(e => e.AirDateUtc    = DateTime.Now.AddDays(-5))
                                          .With(e => e.Monitored     = true)
                                          .TheFirst(1)
                                          .With(e => e.Monitored = false)
                                          .TheLast(1)
                                          .With(e => e.SeasonNumber = 0)
                                          .Build();

            var unmonitoredSeriesEpisodes = Builder <Episode> .CreateListOfSize(3)
                                            .All()
                                            .With(e => e.Id            = 0)
                                            .With(e => e.SeriesId      = _unmonitoredSeries.Id)
                                            .With(e => e.EpisodeFileId = 0)
                                            .With(e => e.AirDateUtc    = DateTime.Now.AddDays(-5))
                                            .With(e => e.Monitored     = true)
                                            .TheFirst(1)
                                            .With(e => e.Monitored = false)
                                            .TheLast(1)
                                            .With(e => e.SeasonNumber = 0)
                                            .Build();


            var unairedEpisodes = Builder <Episode> .CreateListOfSize(1)
                                  .All()
                                  .With(e => e.Id            = 0)
                                  .With(e => e.SeriesId      = _monitoredSeries.Id)
                                  .With(e => e.EpisodeFileId = 0)
                                  .With(e => e.AirDateUtc    = DateTime.Now.AddDays(5))
                                  .With(e => e.Monitored     = true)
                                  .Build();


            Db.InsertMany(monitoredSeriesEpisodes);
            Db.InsertMany(unmonitoredSeriesEpisodes);
            Db.InsertMany(unairedEpisodes);
        }
Exemple #15
0
 public PagingSpec <Blacklist> Paged(PagingSpec <Blacklist> pagingSpec)
 {
     return(_blacklistRepository.GetPaged(pagingSpec));
 }
Exemple #16
0
 public static Expression <Func <TModel, object> > OrderByClause <TModel>(this PagingSpec <TModel> pagingSpec)
 {
     return(CreateExpression <TModel>(pagingSpec.SortKey));
 }
Exemple #17
0
 public static int PagingOffset <TModel>(this PagingSpec <TModel> pagingSpec)
 {
     return((pagingSpec.Page - 1) * pagingSpec.PageSize);
 }
Exemple #18
0
 public PagingSpec <History> Paged(PagingSpec <History> pagingSpec)
 {
     return(_historyRepository.GetPaged(pagingSpec));
 }
        protected PagingResource <TResource> ApplyToPage <TModel>(Func <PagingSpec <TModel>, PagingSpec <TModel> > function, PagingSpec <TModel> pagingSpec) where TModel : ModelBase, new()
        {
            pagingSpec = function(pagingSpec);

            return(new PagingResource <TResource>
            {
                Page = pagingSpec.Page,
                PageSize = pagingSpec.PageSize,
                SortDirection = pagingSpec.SortDirection,
                SortKey = pagingSpec.SortKey,
                TotalRecords = pagingSpec.TotalRecords,
                Records = pagingSpec.Records.InjectTo <List <TResource> >()
            });
        }
Exemple #20
0
        protected PagingResource<TResource> ApplyToPage<TModel>(Func<PagingSpec<TModel>, PagingSpec<TModel>> function, PagingSpec<TModel> pagingSpec, Converter<TModel, TResource> mapper)
        {
            pagingSpec = function(pagingSpec);

            return new PagingResource<TResource>
            {
                Page = pagingSpec.Page,
                PageSize = pagingSpec.PageSize,
                SortDirection = pagingSpec.SortDirection,
                SortKey = pagingSpec.SortKey,
                TotalRecords = pagingSpec.TotalRecords,
                Records = pagingSpec.Records.ConvertAll(mapper)
            };
        }
Exemple #21
0
        protected override SortBuilder <History> GetPagedQuery(QueryBuilder <History> query, PagingSpec <History> pagingSpec)
        {
            var baseQuery = query.Join <History, Series>(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id)
                            .Join <History, Episode>(JoinType.Inner, h => h.Episode, (h, e) => h.EpisodeId == e.Id);

            return(base.GetPagedQuery(baseQuery, pagingSpec));
        }