1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-30 18:25:57 -04:00

New: Blocklist Custom Filters

(cherry picked from commit f81bb3ec1945d343dd0695a2826dac8833cb6346)

Closes #9997
This commit is contained in:
Stevie Robinson
2024-05-09 03:42:41 +02:00
committed by Bogdan
parent 0ec18ce4b3
commit 190c4c5893
10 changed files with 188 additions and 19 deletions

View File

@@ -48,14 +48,30 @@ namespace NzbDrone.Core.Blocklisting
Delete(x => movieIds.Contains(x.MovieId));
}
protected override SqlBuilder PagedBuilder() => new SqlBuilder(_database.DatabaseType)
.Join<Blocklist, Movie>((b, m) => b.MovieId == m.Id)
.LeftJoin<Movie, MovieMetadata>((m, mm) => m.MovieMetadataId == mm.Id);
public override PagingSpec<Blocklist> GetPaged(PagingSpec<Blocklist> pagingSpec)
{
pagingSpec.Records = GetPagedRecords(PagedBuilder(), pagingSpec, PagedQuery);
protected override IEnumerable<Blocklist> PagedQuery(SqlBuilder sql) => _database.QueryJoined<Blocklist, Movie>(sql, (bl, movie) =>
{
bl.Movie = movie;
return bl;
});
var countTemplate = $"SELECT COUNT(*) FROM (SELECT /**select**/ FROM \"{TableMapping.Mapper.TableNameMapping(typeof(Blocklist))}\" /**join**/ /**innerjoin**/ /**leftjoin**/ /**where**/ /**groupby**/ /**having**/) AS \"Inner\"";
pagingSpec.TotalRecords = GetPagedRecordCount(PagedBuilder().Select(typeof(Blocklist)), pagingSpec, countTemplate);
return pagingSpec;
}
protected override SqlBuilder PagedBuilder()
{
var builder = Builder()
.Join<Blocklist, Movie>((b, m) => b.MovieId == m.Id)
.LeftJoin<Movie, MovieMetadata>((m, mm) => m.MovieMetadataId == mm.Id);
return builder;
}
protected override IEnumerable<Blocklist> PagedQuery(SqlBuilder builder) =>
_database.QueryJoined<Blocklist, Movie>(builder, (blocklist, movie) =>
{
blocklist.Movie = movie;
return blocklist;
});
}
}

View File

@@ -138,6 +138,7 @@
"BlocklistAndSearch": "Blocklist and Search",
"BlocklistAndSearchHint": "Start a search for a replacement after blocklisting",
"BlocklistAndSearchMultipleHint": "Start searches for replacements after blocklisting",
"BlocklistFilterHasNoItems": "Selected blocklist filter contains no items",
"BlocklistLoadError": "Unable to load blocklist",
"BlocklistMultipleOnlyHint": "Blocklist without searching for replacements",
"BlocklistOnly": "Blocklist Only",

View File

@@ -4,6 +4,7 @@ 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;
@@ -25,12 +26,22 @@ namespace Radarr.Api.V3.Blocklist
[HttpGet]
[Produces("application/json")]
public PagingResource<BlocklistResource> GetBlocklist([FromQuery] PagingRequestResource paging)
public PagingResource<BlocklistResource> GetBlocklist([FromQuery] PagingRequestResource paging, [FromQuery] int[] movieIds = null, [FromQuery] DownloadProtocol[] protocols = null)
{
var pagingResource = new PagingResource<BlocklistResource>(paging);
var pagingSpec = pagingResource.MapToPagingSpec<BlocklistResource, NzbDrone.Core.Blocklisting.Blocklist>("date", SortDirection.Descending);
return pagingSpec.ApplyToPage(_blocklistService.Paged, model => BlocklistResourceMapper.MapToResource(model, _formatCalculator));
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")]