From dfd9440ee426e1e3c10f6c596bdeecf5f37d3737 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 26 Jul 2023 11:36:59 +0300 Subject: [PATCH] Fixed: Add dedupe releases rule based on indexer priority Closes #3925 --- src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs | 6 ++++-- src/NzbDrone.Core/Indexers/IndexerDefinition.cs | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs index 7b52bad32..5205c0e3e 100644 --- a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs @@ -166,8 +166,10 @@ namespace NzbDrone.Core.IndexerSearch private List DeDupeDecisions(List decisions) { - // De-dupe reports by guid so duplicate results aren't returned. - return decisions.DistinctBy(d => d.RemoteAlbum.Release.Guid).ToList(); + // De-dupe reports by guid so duplicate results aren't returned. Pick the one with the least rejections and higher indexer priority. + return decisions.GroupBy(d => d.RemoteAlbum.Release.Guid) + .Select(d => d.OrderBy(v => v.Rejections.Count()).ThenBy(v => v.RemoteAlbum?.Release?.IndexerPriority ?? IndexerDefinition.DefaultPriority).First()) + .ToList(); } } } diff --git a/src/NzbDrone.Core/Indexers/IndexerDefinition.cs b/src/NzbDrone.Core/Indexers/IndexerDefinition.cs index a6ed69130..50bea595b 100644 --- a/src/NzbDrone.Core/Indexers/IndexerDefinition.cs +++ b/src/NzbDrone.Core/Indexers/IndexerDefinition.cs @@ -4,6 +4,13 @@ namespace NzbDrone.Core.Indexers { public class IndexerDefinition : ProviderDefinition { + public const int DefaultPriority = 25; + + public IndexerDefinition() + { + Priority = DefaultPriority; + } + public bool EnableRss { get; set; } public bool EnableAutomaticSearch { get; set; } public bool EnableInteractiveSearch { get; set; } @@ -11,7 +18,7 @@ namespace NzbDrone.Core.Indexers public DownloadProtocol Protocol { get; set; } public bool SupportsRss { get; set; } public bool SupportsSearch { get; set; } - public int Priority { get; set; } = 25; + public int Priority { get; set; } public override bool Enable => EnableRss || EnableAutomaticSearch || EnableInteractiveSearch;