From 38c717bcef6fa5fcd2ff1c7901639eb888a94a8a Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 29 Jul 2023 04:35:50 +0300 Subject: [PATCH] Dedupe releases based on indexer priority --- src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs | 7 ++++--- src/NzbDrone.Core/Indexers/IndexerDefinition.cs | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs index 7ed143f157e..3135eced8b4 100644 --- a/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/ReleaseSearchService.cs @@ -548,9 +548,10 @@ private List Dispatch(Func> private List DeDupeDecisions(List decisions) { - // De-dupe reports by guid so duplicate results aren't returned. Pick the one with the least rejections. - - return decisions.GroupBy(d => d.RemoteEpisode.Release.Guid).Select(d => d.OrderBy(v => v.Rejections.Count()).First()).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.RemoteEpisode.Release.Guid) + .Select(d => d.OrderBy(v => v.Rejections.Count()).ThenBy(v => v.RemoteEpisode?.Release?.IndexerPriority ?? IndexerDefinition.DefaultPriority).First()) + .ToList(); } } } diff --git a/src/NzbDrone.Core/Indexers/IndexerDefinition.cs b/src/NzbDrone.Core/Indexers/IndexerDefinition.cs index ef30dc7fb44..882624ab400 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 @@ public class IndexerDefinition : ProviderDefinition 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 int SeasonSearchMaximumSingleEpisodeAge { get; set; } public override bool Enable => EnableRss || EnableAutomaticSearch || EnableInteractiveSearch;