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); }
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; }
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)); }
public PagingSpec <Movie> Paged(PagingSpec <Movie> pagingSpec) { return(_movieRepository.GetPaged(pagingSpec)); }
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); }
public PagingSpec <Movie> MoviesWithoutFiles(PagingSpec <Movie> pagingSpec) { var movieResult = _movieRepository.MoviesWithoutFiles(pagingSpec); return(movieResult); }
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); }
public PagingSpec <Blacklist> Paged(PagingSpec <Blacklist> pagingSpec) { return(_blacklistRepository.GetPaged(pagingSpec)); }
public static Expression <Func <TModel, object> > OrderByClause <TModel>(this PagingSpec <TModel> pagingSpec) { return(CreateExpression <TModel>(pagingSpec.SortKey)); }
public static int PagingOffset <TModel>(this PagingSpec <TModel> pagingSpec) { return((pagingSpec.Page - 1) * pagingSpec.PageSize); }
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> >() }); }
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) }; }
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)); }