Fixed: Don't die when grabbing releases in bulk

pull/1968/head v1.11.4.4173
Bogdan 5 months ago
parent 8beff32117
commit 20cc146d82

@ -369,8 +369,9 @@ export const actionHandlers = handleThunks({
promise.done((data) => { promise.done((data) => {
dispatch(batchActions([ dispatch(batchActions([
...data.map((release) => { ...data.map(({ guid }) => {
return updateRelease({ return updateRelease({
guid,
isGrabbing: false, isGrabbing: false,
isGrabbed: true, isGrabbed: true,
grabError: null grabError: null

@ -9,6 +9,7 @@ using NLog;
using NzbDrone.Common.Cache; using NzbDrone.Common.Cache;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.Core.Download.Clients;
using NzbDrone.Core.Exceptions; using NzbDrone.Core.Exceptions;
using NzbDrone.Core.Indexers; using NzbDrone.Core.Indexers;
using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.IndexerSearch;
@ -54,7 +55,7 @@ namespace Prowlarr.Api.V1.Search
[HttpPost] [HttpPost]
[Consumes("application/json")] [Consumes("application/json")]
[Produces("application/json")] [Produces("application/json")]
public ActionResult<ReleaseResource> GrabRelease(ReleaseResource release) public async Task<ActionResult<ReleaseResource>> GrabRelease(ReleaseResource release)
{ {
ValidateResource(release); ValidateResource(release);
@ -73,11 +74,12 @@ namespace Prowlarr.Api.V1.Search
try try
{ {
_downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect, null).GetAwaiter().GetResult(); await _downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect, null);
} }
catch (ReleaseDownloadException ex) catch (ReleaseDownloadException ex)
{ {
_logger.Error(ex, "Getting release from indexer failed"); _logger.Error(ex, "Getting release from indexer failed");
throw new NzbDroneClientException(HttpStatusCode.Conflict, "Getting release from indexer failed"); throw new NzbDroneClientException(HttpStatusCode.Conflict, "Getting release from indexer failed");
} }
@ -87,12 +89,16 @@ namespace Prowlarr.Api.V1.Search
[HttpPost("bulk")] [HttpPost("bulk")]
[Consumes("application/json")] [Consumes("application/json")]
[Produces("application/json")] [Produces("application/json")]
public ActionResult<ReleaseResource> GrabReleases(List<ReleaseResource> releases) public async Task<ActionResult<ReleaseResource>> GrabReleases(List<ReleaseResource> releases)
{ {
releases.ForEach(release => ValidateResource(release));
var source = Request.GetSource(); var source = Request.GetSource();
var host = Request.GetHostName(); var host = Request.GetHostName();
var groupedReleases = releases.GroupBy(r => r.IndexerId); var grabbedReleases = new List<ReleaseResource>();
var groupedReleases = releases.GroupBy(r => r.IndexerId).ToList();
foreach (var indexerReleases in groupedReleases) foreach (var indexerReleases in groupedReleases)
{ {
@ -100,22 +106,42 @@ namespace Prowlarr.Api.V1.Search
foreach (var release in indexerReleases) foreach (var release in indexerReleases)
{ {
ValidateResource(release);
var releaseInfo = _remoteReleaseCache.Find(GetCacheKey(release)); var releaseInfo = _remoteReleaseCache.Find(GetCacheKey(release));
if (releaseInfo == null)
{
_logger.Error("Couldn't find requested release in cache, cache timeout probably expired.");
continue;
}
try try
{ {
_downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect, null).GetAwaiter().GetResult(); await _downloadService.SendReportToClient(releaseInfo, source, host, indexerDef.Redirect, null);
} }
catch (ReleaseDownloadException ex) catch (ReleaseDownloadException ex)
{ {
_logger.Error(ex, "Getting release from indexer failed"); _logger.Error(ex, "Getting release from indexer failed");
continue;
}
catch (DownloadClientException ex)
{
_logger.Error(ex, "Failed to send grabbed release to download client");
continue;
} }
grabbedReleases.Add(release);
} }
} }
return Ok(releases); if (!grabbedReleases.Any())
{
throw new NzbDroneClientException(HttpStatusCode.BadRequest, "Failed to grab any release");
}
return Ok(grabbedReleases);
} }
[HttpGet] [HttpGet]

Loading…
Cancel
Save