move filtering of protocols to controller

This commit is contained in:
Stevie Robinson 2024-05-05 09:45:34 +02:00
parent 2b7f63e76b
commit c24db3bf9a
3 changed files with 14 additions and 28 deletions

View File

@ -1,6 +1,5 @@
using System.Collections.Generic;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Tv;
@ -12,7 +11,6 @@ namespace NzbDrone.Core.Blocklisting
List<Blocklist> BlocklistedByTorrentInfoHash(int seriesId, string torrentInfoHash);
List<Blocklist> BlocklistedBySeries(int seriesId);
void DeleteForSeriesIds(List<int> seriesIds);
PagingSpec<Blocklist> GetPaged(PagingSpec<Blocklist> pagingSpec, DownloadProtocol[] protocols);
}
public class BlocklistRepository : BasicRepository<Blocklist>, IBlocklistRepository
@ -42,26 +40,21 @@ namespace NzbDrone.Core.Blocklisting
Delete(x => seriesIds.Contains(x.SeriesId));
}
public PagingSpec<Blocklist> GetPaged(PagingSpec<Blocklist> pagingSpec, DownloadProtocol[] protocols)
public override PagingSpec<Blocklist> GetPaged(PagingSpec<Blocklist> pagingSpec)
{
pagingSpec.Records = GetPagedRecords(PagedBuilder(protocols), pagingSpec, PagedQuery);
pagingSpec.Records = GetPagedRecords(PagedBuilder(), pagingSpec, PagedQuery);
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(protocols).Select(typeof(Blocklist)), pagingSpec, countTemplate);
pagingSpec.TotalRecords = GetPagedRecordCount(PagedBuilder().Select(typeof(Blocklist)), pagingSpec, countTemplate);
return pagingSpec;
}
private SqlBuilder PagedBuilder(DownloadProtocol[] protocols)
protected override SqlBuilder PagedBuilder()
{
var builder = Builder()
.Join<Blocklist, Series>((b, m) => b.SeriesId == m.Id);
if (protocols is { Length: > 0 })
{
builder.Where($"({BuildProtocolWhereClause(protocols)})");
}
return builder;
}
@ -71,17 +64,5 @@ namespace NzbDrone.Core.Blocklisting
blocklist.Series = series;
return blocklist;
});
private string BuildProtocolWhereClause(DownloadProtocol[] protocols)
{
var clauses = new List<string>();
foreach (var protocol in protocols)
{
clauses.Add($"\"{TableMapping.Mapper.TableNameMapping(typeof(Blocklist))}\".\"Protocol\" = {(int)protocol}");
}
return $"({string.Join(" OR ", clauses)})";
}
}
}

View File

@ -16,7 +16,7 @@ namespace NzbDrone.Core.Blocklisting
{
bool Blocklisted(int seriesId, ReleaseInfo release);
bool BlocklistedTorrentHash(int seriesId, string hash);
PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec, DownloadProtocol[] protocols);
PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec);
void Block(RemoteEpisode remoteEpisode, string message);
void Delete(int id);
void Delete(List<int> ids);
@ -66,9 +66,9 @@ namespace NzbDrone.Core.Blocklisting
b.TorrentInfoHash.Equals(hash, StringComparison.InvariantCultureIgnoreCase));
}
public PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec, DownloadProtocol[] protocols)
public PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec)
{
return _blocklistRepository.GetPaged(pagingSpec, protocols);
return _blocklistRepository.GetPaged(pagingSpec);
}
public void Block(RemoteEpisode remoteEpisode, string message)

View File

@ -30,12 +30,17 @@ namespace Sonarr.Api.V3.Blocklist
var pagingResource = new PagingResource<BlocklistResource>(paging);
var pagingSpec = pagingResource.MapToPagingSpec<BlocklistResource, NzbDrone.Core.Blocklisting.Blocklist>("date", SortDirection.Descending);
if (seriesIds != null && seriesIds.Any())
if (seriesIds?.Any() == true)
{
pagingSpec.FilterExpressions.Add(b => seriesIds.Contains(b.SeriesId));
}
return pagingSpec.ApplyToPage(b => _blocklistService.Paged(pagingSpec, protocols), b => BlocklistResourceMapper.MapToResource(b, _formatCalculator));
if (protocols?.Any() == true)
{
pagingSpec.FilterExpressions.Add(b => protocols.Contains(b.Protocol));
}
return pagingSpec.ApplyToPage(b => _blocklistService.Paged(pagingSpec), b => BlocklistResourceMapper.MapToResource(b, _formatCalculator));
}
[RestDeleteById]