From ed22bb719ddd1e6f0286b87314ee720ff474cdff Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 16 Jan 2023 22:38:05 -0600 Subject: [PATCH] DownloadClientRootFolderCheck Improvements --- .../Download/DownloadClientProvider.cs | 29 +++++++++++++++++-- .../Checks/DownloadClientRootFolderCheck.cs | 3 +- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core/Download/DownloadClientProvider.cs b/src/NzbDrone.Core/Download/DownloadClientProvider.cs index 3fa2bcc39..df9249dcc 100644 --- a/src/NzbDrone.Core/Download/DownloadClientProvider.cs +++ b/src/NzbDrone.Core/Download/DownloadClientProvider.cs @@ -10,7 +10,7 @@ namespace NzbDrone.Core.Download public interface IProvideDownloadClient { IDownloadClient GetDownloadClient(DownloadProtocol downloadProtocol, int indexerId = 0); - IEnumerable GetDownloadClients(); + IEnumerable GetDownloadClients(bool filterBlockedClients = false); IDownloadClient Get(int id); } @@ -86,14 +86,37 @@ namespace NzbDrone.Core.Download return provider; } - public IEnumerable GetDownloadClients() + public IEnumerable GetDownloadClients(bool filterBlockedClients = false) { - return _downloadClientFactory.GetAvailableProviders(); + var enabledClients = _downloadClientFactory.GetAvailableProviders(); + + if (filterBlockedClients) + { + return FilterBlockedDownloadClients(enabledClients).ToList(); + } + + return enabledClients; } public IDownloadClient Get(int id) { return _downloadClientFactory.GetAvailableProviders().Single(d => d.Definition.Id == id); } + + private IEnumerable FilterBlockedDownloadClients(IEnumerable clients) + { + var blockedClients = _downloadClientStatusService.GetBlockedProviders().ToDictionary(v => v.ProviderId, v => v); + + foreach (var client in clients) + { + if (blockedClients.TryGetValue(client.Definition.Id, out var blockedClientStatus)) + { + _logger.Debug("Temporarily ignoring client {0} till {1} due to recent failures.", client.Definition.Name, blockedClientStatus.DisabledTill.Value.ToLocalTime()); + continue; + } + + yield return client; + } + } } } diff --git a/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs b/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs index ec92486a1..5b2775ed9 100644 --- a/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs +++ b/src/NzbDrone.Core/HealthCheck/Checks/DownloadClientRootFolderCheck.cs @@ -35,7 +35,8 @@ namespace NzbDrone.Core.HealthCheck.Checks public override HealthCheck Check() { // Only check clients not in failure status, those get another message - var clients = _downloadClientProvider.GetDownloadClients(); + var clients = _downloadClientProvider.GetDownloadClients(true); + var rootFolders = _rootFolderService.All(); foreach (var client in clients)