using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Configuration; using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.MediaCover; using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.Translations; using NzbDrone.Core.MovieStats; using NzbDrone.SignalR; using Radarr.Api.V3.Movies; using Radarr.Http; using Radarr.Http.Extensions; namespace Radarr.Api.V3.Wanted { [V3ApiController("wanted/cutoff")] public class CutoffController : MovieControllerWithSignalR { private readonly IMovieCutoffService _movieCutoffService; public CutoffController(IMovieCutoffService movieCutoffService, IMovieService movieService, IMovieTranslationService movieTranslationService, IMovieStatisticsService movieStatisticsService, IUpgradableSpecification upgradableSpecification, ICustomFormatCalculationService formatCalculator, IConfigService configService, IMapCoversToLocal coverMapper, IBroadcastSignalRMessage signalRBroadcaster) : base(movieService, movieTranslationService, movieStatisticsService, upgradableSpecification, formatCalculator, configService, coverMapper, signalRBroadcaster) { _movieCutoffService = movieCutoffService; } [NonAction] public override ActionResult GetResourceByIdWithErrorHandler(int id) { throw new NotImplementedException(); } [HttpGet] [Produces("application/json")] public PagingResource GetCutoffUnmetMovies([FromQuery] PagingRequestResource paging, bool monitored = true) { var pagingResource = new PagingResource(paging); var pagingSpec = pagingResource.MapToPagingSpec( new HashSet(StringComparer.OrdinalIgnoreCase) { "movieMetadata.digitalRelease", "movieMetadata.inCinemas", "movieMetadata.physicalRelease", "movieMetadata.sortTitle", "movieMetadata.year", "movies.lastSearchTime" }, "movieMetadata.sortTitle", SortDirection.Ascending); pagingSpec.FilterExpressions.Add(v => v.Monitored == monitored); var resource = pagingSpec.ApplyToPage(_movieCutoffService.MoviesWhereCutoffUnmet, v => MapToResource(v)); return resource; } } }