mirror of
https://github.com/Readarr/Readarr.git
synced 2026-04-18 21:34:28 -04:00
New: Renamed Blacklist to Blocklist
(cherry picked from commit ead1371846b1f19cd49928052be0128bf7ccd41f)
This commit is contained in:
30
src/NzbDrone.Api/Blocklist/BlocklistModule.cs
Normal file
30
src/NzbDrone.Api/Blocklist/BlocklistModule.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using Sonarr.Http;
|
||||
|
||||
namespace NzbDrone.Api.Blocklist
|
||||
{
|
||||
public class BlocklistModule : SonarrRestModule<BlocklistResource>
|
||||
{
|
||||
private readonly BlocklistService _blocklistService;
|
||||
|
||||
public BlocklistModule(BlocklistService blocklistService)
|
||||
{
|
||||
_blocklistService = blocklistService;
|
||||
GetResourcePaged = Blocklist;
|
||||
DeleteResource = DeleteBlockList;
|
||||
}
|
||||
|
||||
private PagingResource<BlocklistResource> Blocklist(PagingResource<BlocklistResource> pagingResource)
|
||||
{
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<BlocklistResource, Core.Blocklisting.Blocklist>("id", SortDirection.Ascending);
|
||||
|
||||
return ApplyToPage(_blocklistService.Paged, pagingSpec, BlocklistResourceMapper.MapToResource);
|
||||
}
|
||||
|
||||
private void DeleteBlockList(int id)
|
||||
{
|
||||
_blocklistService.Delete(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
49
src/NzbDrone.Api/Blocklist/BlocklistResource.cs
Normal file
49
src/NzbDrone.Api/Blocklist/BlocklistResource.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Sonarr.Http.REST;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Api.Series;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Languages;
|
||||
|
||||
namespace NzbDrone.Api.Blocklist
|
||||
{
|
||||
public class BlocklistResource : RestResource
|
||||
{
|
||||
public int SeriesId { get; set; }
|
||||
public List<int> EpisodeIds { get; set; }
|
||||
public string SourceTitle { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public DownloadProtocol Protocol { get; set; }
|
||||
public string Indexer { get; set; }
|
||||
public string Message { get; set; }
|
||||
public Language Language { get; set; }
|
||||
|
||||
public SeriesResource Series { get; set; }
|
||||
}
|
||||
|
||||
public static class BlocklistResourceMapper
|
||||
{
|
||||
public static BlocklistResource MapToResource(this Core.Blocklisting.Blocklist model)
|
||||
{
|
||||
if (model == null) return null;
|
||||
|
||||
return new BlocklistResource
|
||||
{
|
||||
Id = model.Id,
|
||||
|
||||
SeriesId = model.SeriesId,
|
||||
EpisodeIds = model.EpisodeIds,
|
||||
SourceTitle = model.SourceTitle,
|
||||
Quality = model.Quality,
|
||||
Date = model.Date,
|
||||
Protocol = model.Protocol,
|
||||
Indexer = model.Indexer,
|
||||
Message = model.Message,
|
||||
|
||||
Series = model.Series.ToResource()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,7 @@ namespace NzbDrone.Automation.Test
|
||||
|
||||
_page.Find(By.LinkText("Queue")).Should().NotBeNull();
|
||||
_page.Find(By.LinkText("History")).Should().NotBeNull();
|
||||
_page.Find(By.LinkText("Blacklist")).Should().NotBeNull();
|
||||
_page.Find(By.LinkText("Blocklist")).Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -3,21 +3,21 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Blacklisting
|
||||
namespace NzbDrone.Core.Test.Blocklisting
|
||||
{
|
||||
[TestFixture]
|
||||
public class BlacklistRepositoryFixture : DbTest<BlacklistRepository, Blacklist>
|
||||
public class BlocklistRepositoryFixture : DbTest<BlocklistRepository, Blocklist>
|
||||
{
|
||||
private Blacklist _blacklist;
|
||||
private Blocklist _blocklist;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_blacklist = new Blacklist
|
||||
_blocklist = new Blocklist
|
||||
{
|
||||
AuthorId = 12345,
|
||||
BookIds = new List<int> { 1 },
|
||||
@@ -30,24 +30,24 @@ namespace NzbDrone.Core.Test.Blacklisting
|
||||
[Test]
|
||||
public void should_be_able_to_write_to_database()
|
||||
{
|
||||
Subject.Insert(_blacklist);
|
||||
Subject.Insert(_blocklist);
|
||||
Subject.All().Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_should_have_book_ids()
|
||||
{
|
||||
Subject.Insert(_blacklist);
|
||||
Subject.Insert(_blocklist);
|
||||
|
||||
Subject.All().First().BookIds.Should().Contain(_blacklist.BookIds);
|
||||
Subject.All().First().BookIds.Should().Contain(_blocklist.BookIds);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_check_for_blacklisted_title_case_insensative()
|
||||
public void should_check_for_blocklisted_title_case_insensative()
|
||||
{
|
||||
Subject.Insert(_blacklist);
|
||||
Subject.Insert(_blocklist);
|
||||
|
||||
Subject.BlacklistedByTitle(_blacklist.AuthorId, _blacklist.SourceTitle.ToUpperInvariant()).Should().HaveCount(1);
|
||||
Subject.BlocklistedByTitle(_blocklist.AuthorId, _blocklist.SourceTitle.ToUpperInvariant()).Should().HaveCount(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,15 +2,15 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Blacklisting
|
||||
namespace NzbDrone.Core.Test.Blocklisting
|
||||
{
|
||||
[TestFixture]
|
||||
public class BlacklistServiceFixture : CoreTest<BlacklistService>
|
||||
public class BlocklistServiceFixture : CoreTest<BlocklistService>
|
||||
{
|
||||
private DownloadFailedEvent _event;
|
||||
|
||||
@@ -39,8 +39,8 @@ namespace NzbDrone.Core.Test.Blacklisting
|
||||
{
|
||||
Subject.Handle(_event);
|
||||
|
||||
Mocker.GetMock<IBlacklistRepository>()
|
||||
.Verify(v => v.Insert(It.Is<Blacklist>(b => b.BookIds == _event.BookIds)), Times.Once());
|
||||
Mocker.GetMock<IBlocklistRepository>()
|
||||
.Verify(v => v.Insert(It.Is<Blocklist>(b => b.BookIds == _event.BookIds)), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -51,8 +51,8 @@ namespace NzbDrone.Core.Test.Blacklisting
|
||||
_event.Data.Remove("size");
|
||||
_event.Data.Remove("protocol");
|
||||
|
||||
Mocker.GetMock<IBlacklistRepository>()
|
||||
.Verify(v => v.Insert(It.Is<Blacklist>(b => b.BookIds == _event.BookIds)), Times.Once());
|
||||
Mocker.GetMock<IBlocklistRepository>()
|
||||
.Verify(v => v.Insert(It.Is<Blocklist>(b => b.BookIds == _event.BookIds)), Times.Once());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Books;
|
||||
using NzbDrone.Core.Housekeeping.Housekeepers;
|
||||
using NzbDrone.Core.Qualities;
|
||||
@@ -11,35 +11,35 @@ using NzbDrone.Core.Test.Framework;
|
||||
namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
|
||||
{
|
||||
[TestFixture]
|
||||
public class CleanupOrphanedBlacklistFixture : DbTest<CleanupOrphanedBlacklist, Blacklist>
|
||||
public class CleanupOrphanedBlocklistFixture : DbTest<CleanupOrphanedBlocklist, Blocklist>
|
||||
{
|
||||
[Test]
|
||||
public void should_delete_orphaned_blacklist_items()
|
||||
public void should_delete_orphaned_blocklist_items()
|
||||
{
|
||||
var blacklist = Builder<Blacklist>.CreateNew()
|
||||
var blocklist = Builder<Blocklist>.CreateNew()
|
||||
.With(h => h.BookIds = new List<int>())
|
||||
.With(h => h.Quality = new QualityModel())
|
||||
.BuildNew();
|
||||
|
||||
Db.Insert(blacklist);
|
||||
Db.Insert(blocklist);
|
||||
Subject.Clean();
|
||||
AllStoredModels.Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_delete_unorphaned_blacklist_items()
|
||||
public void should_not_delete_unorphaned_blocklist_items()
|
||||
{
|
||||
var author = Builder<Author>.CreateNew().BuildNew();
|
||||
|
||||
Db.Insert(author);
|
||||
|
||||
var blacklist = Builder<Blacklist>.CreateNew()
|
||||
var blocklist = Builder<Blocklist>.CreateNew()
|
||||
.With(h => h.BookIds = new List<int>())
|
||||
.With(h => h.Quality = new QualityModel())
|
||||
.With(b => b.AuthorId = author.Id)
|
||||
.BuildNew();
|
||||
|
||||
Db.Insert(blacklist);
|
||||
Db.Insert(blocklist);
|
||||
|
||||
Subject.Clean();
|
||||
AllStoredModels.Should().HaveCount(1);
|
||||
@@ -5,9 +5,9 @@ using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Qualities;
|
||||
|
||||
namespace NzbDrone.Core.Blacklisting
|
||||
namespace NzbDrone.Core.Blocklisting
|
||||
{
|
||||
public class Blacklist : ModelBase
|
||||
public class Blocklist : ModelBase
|
||||
{
|
||||
public int AuthorId { get; set; }
|
||||
public Author Author { get; set; }
|
||||
@@ -3,41 +3,41 @@ using NzbDrone.Core.Books;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
namespace NzbDrone.Core.Blacklisting
|
||||
namespace NzbDrone.Core.Blocklisting
|
||||
{
|
||||
public interface IBlacklistRepository : IBasicRepository<Blacklist>
|
||||
public interface IBlocklistRepository : IBasicRepository<Blocklist>
|
||||
{
|
||||
List<Blacklist> BlacklistedByTitle(int authorId, string sourceTitle);
|
||||
List<Blacklist> BlacklistedByTorrentInfoHash(int authorId, string torrentInfoHash);
|
||||
List<Blacklist> BlacklistedByAuthor(int authorId);
|
||||
List<Blocklist> BlocklistedByTitle(int authorId, string sourceTitle);
|
||||
List<Blocklist> BlocklistedByTorrentInfoHash(int authorId, string torrentInfoHash);
|
||||
List<Blocklist> BlocklistedByAuthor(int authorId);
|
||||
}
|
||||
|
||||
public class BlacklistRepository : BasicRepository<Blacklist>, IBlacklistRepository
|
||||
public class BlocklistRepository : BasicRepository<Blocklist>, IBlocklistRepository
|
||||
{
|
||||
public BlacklistRepository(IMainDatabase database, IEventAggregator eventAggregator)
|
||||
public BlocklistRepository(IMainDatabase database, IEventAggregator eventAggregator)
|
||||
: base(database, eventAggregator)
|
||||
{
|
||||
}
|
||||
|
||||
public List<Blacklist> BlacklistedByTitle(int authorId, string sourceTitle)
|
||||
public List<Blocklist> BlocklistedByTitle(int authorId, string sourceTitle)
|
||||
{
|
||||
return Query(e => e.AuthorId == authorId && e.SourceTitle.Contains(sourceTitle));
|
||||
}
|
||||
|
||||
public List<Blacklist> BlacklistedByTorrentInfoHash(int authorId, string torrentInfoHash)
|
||||
public List<Blocklist> BlocklistedByTorrentInfoHash(int authorId, string torrentInfoHash)
|
||||
{
|
||||
return Query(e => e.AuthorId == authorId && e.TorrentInfoHash.Contains(torrentInfoHash));
|
||||
}
|
||||
|
||||
public List<Blacklist> BlacklistedByAuthor(int authorId)
|
||||
public List<Blocklist> BlocklistedByAuthor(int authorId)
|
||||
{
|
||||
return Query(b => b.AuthorId == authorId);
|
||||
}
|
||||
|
||||
protected override SqlBuilder PagedBuilder() => new SqlBuilder()
|
||||
.Join<Blacklist, Author>((b, m) => b.AuthorId == m.Id)
|
||||
.Join<Blocklist, Author>((b, m) => b.AuthorId == m.Id)
|
||||
.Join<Author, AuthorMetadata>((l, r) => l.AuthorMetadataId == r.Id);
|
||||
protected override IEnumerable<Blacklist> PagedQuery(SqlBuilder builder) => _database.QueryJoined<Blacklist, Author, AuthorMetadata>(builder,
|
||||
protected override IEnumerable<Blocklist> PagedQuery(SqlBuilder builder) => _database.QueryJoined<Blocklist, Author, AuthorMetadata>(builder,
|
||||
(bl, author, metadata) =>
|
||||
{
|
||||
author.Metadata = metadata;
|
||||
@@ -10,32 +10,32 @@ using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.Blacklisting
|
||||
namespace NzbDrone.Core.Blocklisting
|
||||
{
|
||||
public interface IBlacklistService
|
||||
public interface IBlocklistService
|
||||
{
|
||||
bool Blacklisted(int authorId, ReleaseInfo release);
|
||||
PagingSpec<Blacklist> Paged(PagingSpec<Blacklist> pagingSpec);
|
||||
bool Blocklisted(int authorId, ReleaseInfo release);
|
||||
PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec);
|
||||
void Delete(int id);
|
||||
void Delete(List<int> ids);
|
||||
}
|
||||
|
||||
public class BlacklistService : IBlacklistService,
|
||||
public class BlocklistService : IBlocklistService,
|
||||
|
||||
IExecute<ClearBlacklistCommand>,
|
||||
IExecute<ClearBlocklistCommand>,
|
||||
IHandle<DownloadFailedEvent>,
|
||||
IHandleAsync<AuthorDeletedEvent>
|
||||
{
|
||||
private readonly IBlacklistRepository _blacklistRepository;
|
||||
private readonly IBlocklistRepository _blocklistRepository;
|
||||
|
||||
public BlacklistService(IBlacklistRepository blacklistRepository)
|
||||
public BlocklistService(IBlocklistRepository blocklistRepository)
|
||||
{
|
||||
_blacklistRepository = blacklistRepository;
|
||||
_blocklistRepository = blocklistRepository;
|
||||
}
|
||||
|
||||
public bool Blacklisted(int authorId, ReleaseInfo release)
|
||||
public bool Blocklisted(int authorId, ReleaseInfo release)
|
||||
{
|
||||
var blacklistedByTitle = _blacklistRepository.BlacklistedByTitle(authorId, release.Title);
|
||||
var blocklistedByTitle = _blocklistRepository.BlocklistedByTitle(authorId, release.Title);
|
||||
|
||||
if (release.DownloadProtocol == DownloadProtocol.Torrent)
|
||||
{
|
||||
@@ -48,35 +48,35 @@ namespace NzbDrone.Core.Blacklisting
|
||||
|
||||
if (torrentInfo.InfoHash.IsNullOrWhiteSpace())
|
||||
{
|
||||
return blacklistedByTitle.Where(b => b.Protocol == DownloadProtocol.Torrent)
|
||||
return blocklistedByTitle.Where(b => b.Protocol == DownloadProtocol.Torrent)
|
||||
.Any(b => SameTorrent(b, torrentInfo));
|
||||
}
|
||||
|
||||
var blacklistedByTorrentInfohash = _blacklistRepository.BlacklistedByTorrentInfoHash(authorId, torrentInfo.InfoHash);
|
||||
var blocklistedByTorrentInfohash = _blocklistRepository.BlocklistedByTorrentInfoHash(authorId, torrentInfo.InfoHash);
|
||||
|
||||
return blacklistedByTorrentInfohash.Any(b => SameTorrent(b, torrentInfo));
|
||||
return blocklistedByTorrentInfohash.Any(b => SameTorrent(b, torrentInfo));
|
||||
}
|
||||
|
||||
return blacklistedByTitle.Where(b => b.Protocol == DownloadProtocol.Usenet)
|
||||
return blocklistedByTitle.Where(b => b.Protocol == DownloadProtocol.Usenet)
|
||||
.Any(b => SameNzb(b, release));
|
||||
}
|
||||
|
||||
public PagingSpec<Blacklist> Paged(PagingSpec<Blacklist> pagingSpec)
|
||||
public PagingSpec<Blocklist> Paged(PagingSpec<Blocklist> pagingSpec)
|
||||
{
|
||||
return _blacklistRepository.GetPaged(pagingSpec);
|
||||
return _blocklistRepository.GetPaged(pagingSpec);
|
||||
}
|
||||
|
||||
public void Delete(int id)
|
||||
{
|
||||
_blacklistRepository.Delete(id);
|
||||
_blocklistRepository.Delete(id);
|
||||
}
|
||||
|
||||
public void Delete(List<int> ids)
|
||||
{
|
||||
_blacklistRepository.DeleteMany(ids);
|
||||
_blocklistRepository.DeleteMany(ids);
|
||||
}
|
||||
|
||||
private bool SameNzb(Blacklist item, ReleaseInfo release)
|
||||
private bool SameNzb(Blocklist item, ReleaseInfo release)
|
||||
{
|
||||
if (item.PublishedDate == release.PublishDate)
|
||||
{
|
||||
@@ -93,7 +93,7 @@ namespace NzbDrone.Core.Blacklisting
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool SameTorrent(Blacklist item, TorrentInfo release)
|
||||
private bool SameTorrent(Blocklist item, TorrentInfo release)
|
||||
{
|
||||
if (release.InfoHash.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
@@ -103,7 +103,7 @@ namespace NzbDrone.Core.Blacklisting
|
||||
return item.Indexer.Equals(release.Indexer, StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
private bool HasSameIndexer(Blacklist item, string indexer)
|
||||
private bool HasSameIndexer(Blocklist item, string indexer)
|
||||
{
|
||||
if (item.Indexer.IsNullOrWhiteSpace())
|
||||
{
|
||||
@@ -113,7 +113,7 @@ namespace NzbDrone.Core.Blacklisting
|
||||
return item.Indexer.Equals(indexer, StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
private bool HasSamePublishedDate(Blacklist item, DateTime publishedDate)
|
||||
private bool HasSamePublishedDate(Blocklist item, DateTime publishedDate)
|
||||
{
|
||||
if (!item.PublishedDate.HasValue)
|
||||
{
|
||||
@@ -124,7 +124,7 @@ namespace NzbDrone.Core.Blacklisting
|
||||
item.PublishedDate.Value.AddMinutes(2) >= publishedDate;
|
||||
}
|
||||
|
||||
private bool HasSameSize(Blacklist item, long size)
|
||||
private bool HasSameSize(Blocklist item, long size)
|
||||
{
|
||||
if (!item.Size.HasValue)
|
||||
{
|
||||
@@ -136,14 +136,14 @@ namespace NzbDrone.Core.Blacklisting
|
||||
return difference <= 2.Megabytes();
|
||||
}
|
||||
|
||||
public void Execute(ClearBlacklistCommand message)
|
||||
public void Execute(ClearBlocklistCommand message)
|
||||
{
|
||||
_blacklistRepository.Purge();
|
||||
_blocklistRepository.Purge();
|
||||
}
|
||||
|
||||
public void Handle(DownloadFailedEvent message)
|
||||
{
|
||||
var blacklist = new Blacklist
|
||||
var blocklist = new Blocklist
|
||||
{
|
||||
AuthorId = message.AuthorId,
|
||||
BookIds = message.BookIds,
|
||||
@@ -158,14 +158,14 @@ namespace NzbDrone.Core.Blacklisting
|
||||
TorrentInfoHash = message.Data.GetValueOrDefault("torrentInfoHash")
|
||||
};
|
||||
|
||||
_blacklistRepository.Insert(blacklist);
|
||||
_blocklistRepository.Insert(blocklist);
|
||||
}
|
||||
|
||||
public void HandleAsync(AuthorDeletedEvent message)
|
||||
{
|
||||
var blacklisted = _blacklistRepository.BlacklistedByAuthor(message.Author.Id);
|
||||
var blocklisted = _blocklistRepository.BlocklistedByAuthor(message.Author.Id);
|
||||
|
||||
_blacklistRepository.DeleteMany(blacklisted);
|
||||
_blocklistRepository.DeleteMany(blocklisted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
|
||||
namespace NzbDrone.Core.Blacklisting
|
||||
namespace NzbDrone.Core.Blocklisting
|
||||
{
|
||||
public class ClearBlacklistCommand : Command
|
||||
public class ClearBlocklistCommand : Command
|
||||
{
|
||||
public override bool SendUpdatesToClient => true;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(014)]
|
||||
public class rename_blacklist_to_blocklist : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Rename.Table("Blacklist").To("Blocklist");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using System.Linq;
|
||||
using Dapper;
|
||||
using NzbDrone.Common.Reflection;
|
||||
using NzbDrone.Core.Authentication;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Books;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.CustomFilters;
|
||||
@@ -171,7 +171,7 @@ namespace NzbDrone.Core.Datastore
|
||||
Mapper.Entity<Log>("Logs").RegisterModel();
|
||||
Mapper.Entity<NamingConfig>("NamingConfig").RegisterModel();
|
||||
|
||||
Mapper.Entity<Blacklist>("Blacklist").RegisterModel();
|
||||
Mapper.Entity<Blocklist>("Blocklist").RegisterModel();
|
||||
Mapper.Entity<MetadataFile>("MetadataFiles").RegisterModel();
|
||||
Mapper.Entity<OtherExtraFile>("ExtraFiles").RegisterModel();
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
using NLog;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
|
||||
namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
{
|
||||
public class BlacklistSpecification : IDecisionEngineSpecification
|
||||
public class BlocklistSpecification : IDecisionEngineSpecification
|
||||
{
|
||||
private readonly IBlacklistService _blacklistService;
|
||||
private readonly IBlocklistService _blocklistService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public BlacklistSpecification(IBlacklistService blacklistService, Logger logger)
|
||||
public BlocklistSpecification(IBlocklistService blocklistService, Logger logger)
|
||||
{
|
||||
_blacklistService = blacklistService;
|
||||
_blocklistService = blocklistService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -21,10 +21,10 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
||||
|
||||
public Decision IsSatisfiedBy(RemoteBook subject, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
if (_blacklistService.Blacklisted(subject.Author.Id, subject.Release))
|
||||
if (_blocklistService.Blocklisted(subject.Author.Id, subject.Release))
|
||||
{
|
||||
_logger.Debug("{0} is blacklisted, rejecting.", subject.Release.Title);
|
||||
return Decision.Reject("Release is blacklisted");
|
||||
_logger.Debug("{0} is blocklisted, rejecting.", subject.Release.Title);
|
||||
return Decision.Reject("Release is blocklisted");
|
||||
}
|
||||
|
||||
return Decision.Accept();
|
||||
@@ -3,11 +3,11 @@ using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Housekeeping.Housekeepers
|
||||
{
|
||||
public class CleanupOrphanedBlacklist : IHousekeepingTask
|
||||
public class CleanupOrphanedBlocklist : IHousekeepingTask
|
||||
{
|
||||
private readonly IMainDatabase _database;
|
||||
|
||||
public CleanupOrphanedBlacklist(IMainDatabase database)
|
||||
public CleanupOrphanedBlocklist(IMainDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
@@ -16,11 +16,11 @@ namespace NzbDrone.Core.Housekeeping.Housekeepers
|
||||
{
|
||||
using (var mapper = _database.OpenConnection())
|
||||
{
|
||||
mapper.Execute(@"DELETE FROM Blacklist
|
||||
mapper.Execute(@"DELETE FROM Blocklist
|
||||
WHERE Id IN (
|
||||
SELECT Blacklist.Id FROM Blacklist
|
||||
SELECT Blocklist.Id FROM Blocklist
|
||||
LEFT OUTER JOIN Authors
|
||||
ON Blacklist.AuthorId = Authors.Id
|
||||
ON Blocklist.AuthorId = Authors.Id
|
||||
WHERE Authors.Id IS NULL)");
|
||||
}
|
||||
}
|
||||
@@ -60,9 +60,9 @@
|
||||
"BindAddress": "Bind Address",
|
||||
"BindAddressHelpText": "Valid IP4 address or '*' for all interfaces",
|
||||
"BindAddressHelpTextWarning": "Requires restart to take effect",
|
||||
"Blacklist": "Blacklist",
|
||||
"BlacklistHelpText": "Prevents Readarr from automatically grabbing these files again",
|
||||
"BlacklistRelease": "Blacklist Release",
|
||||
"Blocklist": "Blocklist",
|
||||
"BlocklistHelpText": "Prevents Readarr from automatically grabbing these files again",
|
||||
"BlocklistRelease": "Blocklist Release",
|
||||
"Book": "Book",
|
||||
"BookAvailableButMissing": "Book Available, but Missing",
|
||||
"BookDownloaded": "Book Downloaded",
|
||||
@@ -397,6 +397,7 @@
|
||||
"New": "New",
|
||||
"NoBackupsAreAvailable": "No backups are available",
|
||||
"NoHistory": "No history.",
|
||||
"NoHistoryBlocklist": "No history blocklist",
|
||||
"NoLeaveIt": "No, Leave It",
|
||||
"NoLimitForAnyRuntime": "No limit for any runtime",
|
||||
"NoLogFiles": "No log files",
|
||||
@@ -499,12 +500,12 @@
|
||||
"RemovedFromTaskQueue": "Removed from task queue",
|
||||
"RemoveFailedDownloadsHelpText": "Remove failed downloads from download client history",
|
||||
"RemoveFilter": "Remove filter",
|
||||
"RemoveFromBlacklist": "Remove from blacklist",
|
||||
"RemoveFromBlocklist": "Remove from blocklist",
|
||||
"RemoveFromDownloadClient": "Remove From Download Client",
|
||||
"RemoveFromQueue": "Remove from queue",
|
||||
"RemoveHelpTextWarning": "Removing will remove the download and the file(s) from the download client.",
|
||||
"RemoveSelected": "Remove Selected",
|
||||
"RemoveSelectedMessageText": "Are you sure you want to remove the selected items from the blacklist?",
|
||||
"RemoveSelectedMessageText": "Are you sure you want to remove the selected items from the blocklist?",
|
||||
"RemoveTagExistingTag": "Existing tag",
|
||||
"RemoveTagRemovingTag": "Removing tag",
|
||||
"RenameBooks": "Rename Books",
|
||||
@@ -669,7 +670,7 @@
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Unable to add a new remote path mapping, please try again.",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "Unable to add a new root folder, please try again.",
|
||||
"UnableToLoadBackups": "Unable to load backups",
|
||||
"UnableToLoadBlacklist": "Unable to load blacklist",
|
||||
"UnableToLoadBlocklist": "Unable to load blocklist",
|
||||
"UnableToLoadDelayProfiles": "Unable to load Delay Profiles",
|
||||
"UnableToLoadDownloadClientOptions": "Unable to load download client options",
|
||||
"UnableToLoadDownloadClients": "Unable to load download clients",
|
||||
@@ -736,4 +737,4 @@
|
||||
"WriteTagsSync": "All files; keep in sync with Goodreads",
|
||||
"Year": "Year",
|
||||
"YesCancel": "Yes, Cancel"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using Readarr.Api.V1.Author;
|
||||
using Readarr.Api.V1.Blacklist;
|
||||
using Readarr.Api.V1.Blocklist;
|
||||
|
||||
namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
[TestFixture]
|
||||
public class BlacklistFixture : IntegrationTest
|
||||
public class BlocklistFixture : IntegrationTest
|
||||
{
|
||||
private AuthorResource _author;
|
||||
|
||||
[Test]
|
||||
[Ignore("Adding to blacklist not supported")]
|
||||
public void should_be_able_to_add_to_blacklist()
|
||||
[Ignore("Adding to blocklist not supported")]
|
||||
public void should_be_able_to_add_to_blocklist()
|
||||
{
|
||||
_author = EnsureAuthor("14586394", "43765115", "Andrew Hunter Murray");
|
||||
|
||||
Blacklist.Post(new BlacklistResource
|
||||
Blocklist.Post(new BlocklistResource
|
||||
{
|
||||
AuthorId = _author.Id,
|
||||
SourceTitle = "Blacklist - Book 1 [2015 FLAC]"
|
||||
@@ -24,10 +24,10 @@ namespace NzbDrone.Integration.Test.ApiTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Ignore("Adding to blacklist not supported")]
|
||||
public void should_be_able_to_get_all_blacklisted()
|
||||
[Ignore("Adding to blocklist not supported")]
|
||||
public void should_be_able_to_get_all_blocklisted()
|
||||
{
|
||||
var result = Blacklist.GetPaged(0, 1000, "date", "desc");
|
||||
var result = Blocklist.GetPaged(0, 1000, "date", "desc");
|
||||
|
||||
result.Should().NotBeNull();
|
||||
result.TotalRecords.Should().Be(1);
|
||||
@@ -35,12 +35,12 @@ namespace NzbDrone.Integration.Test.ApiTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Ignore("Adding to blacklist not supported")]
|
||||
public void should_be_able_to_remove_from_blacklist()
|
||||
[Ignore("Adding to blocklist not supported")]
|
||||
public void should_be_able_to_remove_from_blocklist()
|
||||
{
|
||||
Blacklist.Delete(1);
|
||||
Blocklist.Delete(1);
|
||||
|
||||
var result = Blacklist.GetPaged(0, 1000, "date", "desc");
|
||||
var result = Blocklist.GetPaged(0, 1000, "date", "desc");
|
||||
|
||||
result.Should().NotBeNull();
|
||||
result.TotalRecords.Should().Be(0);
|
||||
@@ -17,7 +17,7 @@ using NzbDrone.SignalR;
|
||||
using NzbDrone.Test.Common;
|
||||
using NzbDrone.Test.Common.Categories;
|
||||
using Readarr.Api.V1.Author;
|
||||
using Readarr.Api.V1.Blacklist;
|
||||
using Readarr.Api.V1.Blocklist;
|
||||
using Readarr.Api.V1.Books;
|
||||
using Readarr.Api.V1.Config;
|
||||
using Readarr.Api.V1.DownloadClient;
|
||||
@@ -36,7 +36,7 @@ namespace NzbDrone.Integration.Test
|
||||
{
|
||||
protected RestClient RestClient { get; private set; }
|
||||
|
||||
public ClientBase<BlacklistResource> Blacklist;
|
||||
public ClientBase<BlocklistResource> Blocklist;
|
||||
public CommandClient Commands;
|
||||
public ClientBase<TaskResource> Tasks;
|
||||
public DownloadClientClient DownloadClients;
|
||||
@@ -101,7 +101,7 @@ namespace NzbDrone.Integration.Test
|
||||
RestClient.AddDefaultHeader("X-Api-Key", ApiKey);
|
||||
RestClient.UseSystemTextJson();
|
||||
|
||||
Blacklist = new ClientBase<BlacklistResource>(RestClient, ApiKey);
|
||||
Blocklist = new ClientBase<BlocklistResource>(RestClient, ApiKey);
|
||||
Commands = new CommandClient(RestClient, ApiKey);
|
||||
Tasks = new ClientBase<TaskResource>(RestClient, ApiKey, "system/task");
|
||||
DownloadClients = new DownloadClientClient(RestClient, ApiKey);
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NzbDrone.Core.Blacklisting;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Http.REST.Attributes;
|
||||
using Readarr.Http;
|
||||
using Readarr.Http.Extensions;
|
||||
|
||||
namespace Readarr.Api.V1.Blacklist
|
||||
{
|
||||
[V1ApiController]
|
||||
public class BlacklistController : Controller
|
||||
{
|
||||
private readonly IBlacklistService _blacklistService;
|
||||
|
||||
public BlacklistController(IBlacklistService blacklistService)
|
||||
{
|
||||
_blacklistService = blacklistService;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public PagingResource<BlacklistResource> GetBlacklist()
|
||||
{
|
||||
var pagingResource = Request.ReadPagingResourceFromRequest<BlacklistResource>();
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<BlacklistResource, NzbDrone.Core.Blacklisting.Blacklist>("date", SortDirection.Descending);
|
||||
|
||||
return pagingSpec.ApplyToPage(_blacklistService.Paged, BlacklistResourceMapper.MapToResource);
|
||||
}
|
||||
|
||||
[RestDeleteById]
|
||||
public void DeleteBlacklist(int id)
|
||||
{
|
||||
_blacklistService.Delete(id);
|
||||
}
|
||||
|
||||
[HttpDelete("bulk")]
|
||||
public object Remove([FromBody] BlacklistBulkResource resource)
|
||||
{
|
||||
_blacklistService.Delete(resource.Ids);
|
||||
|
||||
return new object();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Readarr.Api.V1.Blacklist
|
||||
namespace Readarr.Api.V1.Blocklist
|
||||
{
|
||||
public class BlacklistBulkResource
|
||||
public class BlocklistBulkResource
|
||||
{
|
||||
public List<int> Ids { get; set; }
|
||||
}
|
||||
43
src/Readarr.Api.V1/Blocklist/BlocklistController.cs
Normal file
43
src/Readarr.Api.V1/Blocklist/BlocklistController.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NzbDrone.Core.Blocklisting;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Http.REST.Attributes;
|
||||
using Readarr.Http;
|
||||
using Readarr.Http.Extensions;
|
||||
|
||||
namespace Readarr.Api.V1.Blocklist
|
||||
{
|
||||
[V1ApiController]
|
||||
public class BlocklistController : Controller
|
||||
{
|
||||
private readonly IBlocklistService _blocklistService;
|
||||
|
||||
public BlocklistController(IBlocklistService blocklistService)
|
||||
{
|
||||
_blocklistService = blocklistService;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public PagingResource<BlocklistResource> GetBlocklist()
|
||||
{
|
||||
var pagingResource = Request.ReadPagingResourceFromRequest<BlocklistResource>();
|
||||
var pagingSpec = pagingResource.MapToPagingSpec<BlocklistResource, NzbDrone.Core.Blocklisting.Blocklist>("date", SortDirection.Descending);
|
||||
|
||||
return pagingSpec.ApplyToPage(_blocklistService.Paged, BlocklistResourceMapper.MapToResource);
|
||||
}
|
||||
|
||||
[RestDeleteById]
|
||||
public void DeleteBlocklist(int id)
|
||||
{
|
||||
_blocklistService.Delete(id);
|
||||
}
|
||||
|
||||
[HttpDelete("bulk")]
|
||||
public object Remove([FromBody] BlocklistBulkResource resource)
|
||||
{
|
||||
_blocklistService.Delete(resource.Ids);
|
||||
|
||||
return new object();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,9 @@ using NzbDrone.Core.Qualities;
|
||||
using Readarr.Api.V1.Author;
|
||||
using Readarr.Http.REST;
|
||||
|
||||
namespace Readarr.Api.V1.Blacklist
|
||||
namespace Readarr.Api.V1.Blocklist
|
||||
{
|
||||
public class BlacklistResource : RestResource
|
||||
public class BlocklistResource : RestResource
|
||||
{
|
||||
public int AuthorId { get; set; }
|
||||
public List<int> BookIds { get; set; }
|
||||
@@ -21,16 +21,16 @@ namespace Readarr.Api.V1.Blacklist
|
||||
public AuthorResource Author { get; set; }
|
||||
}
|
||||
|
||||
public static class BlacklistResourceMapper
|
||||
public static class BlocklistResourceMapper
|
||||
{
|
||||
public static BlacklistResource MapToResource(this NzbDrone.Core.Blacklisting.Blacklist model)
|
||||
public static BlocklistResource MapToResource(this NzbDrone.Core.Blocklisting.Blocklist model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new BlacklistResource
|
||||
return new BlocklistResource
|
||||
{
|
||||
Id = model.Id,
|
||||
|
||||
@@ -59,9 +59,9 @@ namespace Readarr.Api.V1.Queue
|
||||
}
|
||||
|
||||
[RestDeleteById]
|
||||
public void RemoveAction(int id, bool removeFromClient = true, bool blacklist = false, bool skipReDownload = false)
|
||||
public void RemoveAction(int id, bool removeFromClient = true, bool blocklist = false, bool skipReDownload = false)
|
||||
{
|
||||
var trackedDownload = Remove(id, removeFromClient, blacklist, skipReDownload);
|
||||
var trackedDownload = Remove(id, removeFromClient, blocklist, skipReDownload);
|
||||
|
||||
if (trackedDownload != null)
|
||||
{
|
||||
@@ -70,13 +70,13 @@ namespace Readarr.Api.V1.Queue
|
||||
}
|
||||
|
||||
[HttpDelete("bulk")]
|
||||
public object RemoveMany([FromBody] QueueBulkResource resource, [FromQuery] bool removeFromClient = true, [FromQuery] bool blacklist = false, [FromQuery] bool skipReDownload = false)
|
||||
public object RemoveMany([FromBody] QueueBulkResource resource, [FromQuery] bool removeFromClient = true, [FromQuery] bool blocklist = false, [FromQuery] bool skipReDownload = false)
|
||||
{
|
||||
var trackedDownloadIds = new List<string>();
|
||||
|
||||
foreach (var id in resource.Ids)
|
||||
{
|
||||
var trackedDownload = Remove(id, removeFromClient, blacklist, skipReDownload);
|
||||
var trackedDownload = Remove(id, removeFromClient, blocklist, skipReDownload);
|
||||
|
||||
if (trackedDownload != null)
|
||||
{
|
||||
@@ -193,7 +193,7 @@ namespace Readarr.Api.V1.Queue
|
||||
}
|
||||
}
|
||||
|
||||
private TrackedDownload Remove(int id, bool removeFromClient, bool blacklist, bool skipReDownload)
|
||||
private TrackedDownload Remove(int id, bool removeFromClient, bool blocklist, bool skipReDownload)
|
||||
{
|
||||
var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id);
|
||||
|
||||
@@ -223,12 +223,12 @@ namespace Readarr.Api.V1.Queue
|
||||
downloadClient.RemoveItem(trackedDownload.DownloadItem, true);
|
||||
}
|
||||
|
||||
if (blacklist)
|
||||
if (blocklist)
|
||||
{
|
||||
_failedDownloadService.MarkAsFailed(trackedDownload.DownloadItem.DownloadId, skipReDownload);
|
||||
}
|
||||
|
||||
if (!removeFromClient && !blacklist)
|
||||
if (!removeFromClient && !blocklist)
|
||||
{
|
||||
if (!_ignoredDownloadService.IgnoreDownload(trackedDownload))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user