@ -9,7 +9,7 @@ namespace NzbDrone.Core.Download
public interface IProvideDownloadClient
public interface IProvideDownloadClient
{
{
IDownloadClient GetDownloadClient ( DownloadProtocol downloadProtocol ) ;
IDownloadClient GetDownloadClient ( DownloadProtocol downloadProtocol ) ;
IEnumerable < IDownloadClient > GetDownloadClients ( ) ;
IEnumerable < IDownloadClient > GetDownloadClients ( bool filterBlockedClients = false ) ;
IDownloadClient Get ( int id ) ;
IDownloadClient Get ( int id ) ;
}
}
@ -67,14 +67,39 @@ namespace NzbDrone.Core.Download
return provider ;
return provider ;
}
}
public IEnumerable < IDownloadClient > GetDownloadClients ( )
public IEnumerable < IDownloadClient > GetDownloadClients ( bool filterBlockedClients = false )
{
{
return _downloadClientFactory . GetAvailableProviders ( ) ;
var enabledClients = _downloadClientFactory . GetAvailableProviders ( ) ;
if ( filterBlockedClients )
{
return FilterBlockedIndexers ( enabledClients ) . ToList ( ) ;
}
return enabledClients ;
}
}
public IDownloadClient Get ( int id )
public IDownloadClient Get ( int id )
{
{
return _downloadClientFactory . GetAvailableProviders ( ) . Single ( d = > d . Definition . Id = = id ) ;
return _downloadClientFactory . GetAvailableProviders ( ) . Single ( d = > d . Definition . Id = = id ) ;
}
}
private IEnumerable < IDownloadClient > FilterBlockedIndexers ( IEnumerable < IDownloadClient > clients )
{
var blockedClients = _downloadClientStatusService . GetBlockedProviders ( ) . ToDictionary ( v = > v . ProviderId , v = > v ) ;
foreach ( var client in clients )
{
DownloadClientStatus blockedClientStatus ;
if ( blockedClients . TryGetValue ( client . Definition . Id , out blockedClientStatus ) )
{
_logger . Debug ( "Temporarily ignoring client {0} till {1} due to recent failures." , client . Definition . Name , blockedClientStatus . DisabledTill . Value . ToLocalTime ( ) ) ;
continue ;
}
yield return client ;
}
}
}
}
}
}