using System.Linq; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Datastore; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Tv; using NzbDrone.SignalR; using Sonarr.Api.V3.Episodes; using Sonarr.Http; using Sonarr.Http.Extensions; namespace Sonarr.Api.V3.Wanted { [V3ApiController("wanted/cutoff")] public class CutoffController : EpisodeControllerWithSignalR { private readonly IEpisodeCutoffService _episodeCutoffService; public CutoffController(IEpisodeCutoffService episodeCutoffService, IEpisodeService episodeService, ISeriesService seriesService, IUpgradableSpecification upgradableSpecification, IBroadcastSignalRMessage signalRBroadcaster) : base(episodeService, seriesService, upgradableSpecification, signalRBroadcaster) { _episodeCutoffService = episodeCutoffService; } [HttpGet] [Produces("application/json")] public PagingResource GetCutoffUnmetEpisodes(bool includeSeries = false, bool includeEpisodeFile = false, bool includeImages = false) { var pagingResource = Request.ReadPagingResourceFromRequest(); var pagingSpec = new PagingSpec { Page = pagingResource.Page, PageSize = pagingResource.PageSize, SortKey = pagingResource.SortKey, SortDirection = pagingResource.SortDirection }; var filter = pagingResource.Filters.FirstOrDefault(f => f.Key == "monitored"); if (filter != null && filter.Value == "false") { pagingSpec.FilterExpressions.Add(v => v.Monitored == false || v.Series.Monitored == false); } else { pagingSpec.FilterExpressions.Add(v => v.Monitored == true && v.Series.Monitored == true); } var resource = pagingSpec.ApplyToPage(_episodeCutoffService.EpisodesWhereCutoffUnmet, v => MapToResource(v, includeSeries, includeEpisodeFile, includeImages)); return resource; } } }