using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Blocklisting; using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore; using NzbDrone.Core.Indexers; using Radarr.Http; using Radarr.Http.Extensions; using Radarr.Http.REST.Attributes; namespace Radarr.Api.V3.Blocklist { [V3ApiController] public class BlocklistController : Controller { private readonly IBlocklistService _blocklistService; private readonly ICustomFormatCalculationService _formatCalculator; public BlocklistController(IBlocklistService blocklistService, ICustomFormatCalculationService formatCalculator) { _blocklistService = blocklistService; _formatCalculator = formatCalculator; } [HttpGet] [Produces("application/json")] public PagingResource GetBlocklist([FromQuery] PagingRequestResource paging, [FromQuery] int[] movieIds = null, [FromQuery] DownloadProtocol[] protocols = null) { var pagingResource = new PagingResource(paging); var pagingSpec = pagingResource.MapToPagingSpec("date", SortDirection.Descending); if (movieIds?.Any() == true) { pagingSpec.FilterExpressions.Add(b => movieIds.Contains(b.MovieId)); } if (protocols?.Any() == true) { pagingSpec.FilterExpressions.Add(b => protocols.Contains(b.Protocol)); } return pagingSpec.ApplyToPage(b => _blocklistService.Paged(pagingSpec), b => BlocklistResourceMapper.MapToResource(b, _formatCalculator)); } [HttpGet("movie")] public List GetMovieBlocklist(int movieId) { return _blocklistService.GetByMovieId(movieId).Select(h => BlocklistResourceMapper.MapToResource(h, _formatCalculator)).ToList(); } [RestDeleteById] public void DeleteBlocklist(int id) { _blocklistService.Delete(id); } [HttpDelete("bulk")] [Produces("application/json")] public object Remove([FromBody] BlocklistBulkResource resource) { _blocklistService.Delete(resource.Ids); return new { }; } } }