diff --git a/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsRepository.cs b/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsRepository.cs index b3b7ff3e9..1241f8c0c 100644 --- a/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsRepository.cs +++ b/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsRepository.cs @@ -1,4 +1,6 @@ +using System.Collections.Generic; using System.Linq; +using Dapper; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; @@ -8,6 +10,7 @@ public interface IImportExclusionsRepository : IBasicRepository { bool IsMovieExcluded(int tmdbid); ImportExclusion GetByTmdbid(int tmdbid); + List AllExcludedTmdbIds(); } public class ImportExclusionsRepository : BasicRepository, IImportExclusionsRepository @@ -26,5 +29,12 @@ public ImportExclusion GetByTmdbid(int tmdbid) { return Query(x => x.TmdbId == tmdbid).First(); } + + public List AllExcludedTmdbIds() + { + using var conn = _database.OpenConnection(); + + return conn.Query("SELECT \"TmdbId\" FROM \"ImportExclusions\"").ToList(); + } } } diff --git a/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsService.cs b/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsService.cs index 7ebcec069..c94689691 100644 --- a/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsService.cs +++ b/src/NzbDrone.Core/ImportLists/ImportExclusions/ImportExclusionsService.cs @@ -41,7 +41,7 @@ public ImportExclusion AddExclusion(ImportExclusion exclusion) public List AddExclusions(List exclusions) { - _exclusionRepository.InsertMany(exclusions); + _exclusionRepository.InsertMany(DeDupeExclusions(exclusions)); return exclusions; } @@ -76,8 +76,20 @@ public void HandleAsync(MoviesDeletedEvent message) if (message.AddExclusion) { _logger.Debug("Adding {0} Deleted Movies to Import Exclusions", message.Movies.Count); - _exclusionRepository.InsertMany(message.Movies.Select(m => new ImportExclusion { TmdbId = m.TmdbId, MovieTitle = m.Title, MovieYear = m.Year }).ToList()); + + var exclusions = message.Movies.Select(m => new ImportExclusion { TmdbId = m.TmdbId, MovieTitle = m.Title, MovieYear = m.Year }).ToList(); + _exclusionRepository.InsertMany(DeDupeExclusions(exclusions)); } } + + private List DeDupeExclusions(List exclusions) + { + var existingExclusions = _exclusionRepository.AllExcludedTmdbIds(); + + return exclusions + .DistinctBy(x => x.TmdbId) + .Where(x => !existingExclusions.Contains(x.TmdbId)) + .ToList(); + } } }