using System.Collections.Generic; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music; namespace NzbDrone.Core.Blocklisting { public interface IBlocklistRepository : IBasicRepository { List BlocklistedByTitle(int artistId, string sourceTitle); List BlocklistedByTorrentInfoHash(int artistId, string torrentInfoHash); List BlocklistedByArtists(List artistIds); void DeleteForArtists(List artistIds); } public class BlocklistRepository : BasicRepository, IBlocklistRepository { public BlocklistRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } public List BlocklistedByTitle(int artistId, string sourceTitle) { return Query(e => e.ArtistId == artistId && e.SourceTitle.Contains(sourceTitle)); } public List BlocklistedByTorrentInfoHash(int artistId, string torrentInfoHash) { return Query(e => e.ArtistId == artistId && e.TorrentInfoHash.Contains(torrentInfoHash)); } public List BlocklistedByArtists(List artistIds) { return Query(x => artistIds.Contains(x.ArtistId)); } public void DeleteForArtists(List artistIds) { Delete(x => artistIds.Contains(x.ArtistId)); } protected override SqlBuilder PagedBuilder() => new SqlBuilder(_database.DatabaseType).Join((b, m) => b.ArtistId == m.Id); protected override IEnumerable PagedQuery(SqlBuilder builder) => _database.QueryJoined(builder, (bl, artist) => { bl.Artist = artist; return bl; }); } }