New: Resolve download client by name using 'downloadClient' for pushed releases

Closes #4279
pull/4438/head
Bogdan 6 months ago
parent a82a1d46ae
commit bee2b44918

@ -21,6 +21,7 @@ namespace Lidarr.Api.V1.Indexers
private readonly IMakeDownloadDecision _downloadDecisionMaker;
private readonly IProcessDownloadDecisions _downloadDecisionProcessor;
private readonly IIndexerFactory _indexerFactory;
private readonly IDownloadClientFactory _downloadClientFactory;
private readonly Logger _logger;
private static readonly object PushLock = new object();
@ -28,6 +29,7 @@ namespace Lidarr.Api.V1.Indexers
public ReleasePushController(IMakeDownloadDecision downloadDecisionMaker,
IProcessDownloadDecisions downloadDecisionProcessor,
IIndexerFactory indexerFactory,
IDownloadClientFactory downloadClientFactory,
IQualityProfileService qualityProfileService,
Logger logger)
: base(qualityProfileService)
@ -35,6 +37,7 @@ namespace Lidarr.Api.V1.Indexers
_downloadDecisionMaker = downloadDecisionMaker;
_downloadDecisionProcessor = downloadDecisionProcessor;
_indexerFactory = indexerFactory;
_downloadClientFactory = downloadClientFactory;
_logger = logger;
PostValidator.RuleFor(s => s.Title).NotEmpty();
@ -56,6 +59,8 @@ namespace Lidarr.Api.V1.Indexers
ResolveIndexer(info);
var downloadClientId = ResolveDownloadClientId(release);
DownloadDecision decision;
lock (PushLock)
@ -64,7 +69,7 @@ namespace Lidarr.Api.V1.Indexers
decision = decisions.FirstOrDefault();
_downloadDecisionProcessor.ProcessDecision(decision, release.DownloadClientId).GetAwaiter().GetResult();
_downloadDecisionProcessor.ProcessDecision(decision, downloadClientId).GetAwaiter().GetResult();
}
if (decision?.RemoteAlbum.ParsedAlbumInfo == null)
@ -109,5 +114,26 @@ namespace Lidarr.Api.V1.Indexers
_logger.Debug("Push Release {0} not associated with an indexer.", release.Title);
}
}
private int? ResolveDownloadClientId(ReleaseResource release)
{
var downloadClientId = release.DownloadClientId.GetValueOrDefault();
if (downloadClientId == 0 && release.DownloadClient.IsNotNullOrWhiteSpace())
{
var downloadClient = _downloadClientFactory.All().FirstOrDefault(v => v.Name.EqualsIgnoreCase(release.DownloadClient));
if (downloadClient != null)
{
_logger.Debug("Push Release {0} associated with download client {1} - {2}.", release.Title, downloadClientId, release.DownloadClient);
return downloadClient.Id;
}
_logger.Debug("Push Release {0} not associated with known download client {1}.", release.Title, release.DownloadClient);
}
return release.DownloadClientId;
}
}
}

@ -63,6 +63,9 @@ namespace Lidarr.Api.V1.Indexers
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public int? DownloadClientId { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public string DownloadClient { get; set; }
}
public static class ReleaseResourceMapper

Loading…
Cancel
Save