diff --git a/frontend/src/Components/Form/FormLabel.css b/frontend/src/Components/Form/FormLabel.css
index 074b6091d..54a4678e8 100644
--- a/frontend/src/Components/Form/FormLabel.css
+++ b/frontend/src/Components/Form/FormLabel.css
@@ -2,8 +2,10 @@
display: flex;
justify-content: flex-end;
margin-right: $formLabelRightMarginWidth;
+ padding-top: 8px;
+ min-height: 35px;
+ text-align: end;
font-weight: bold;
- line-height: 35px;
}
.hasError {
diff --git a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js
index 48d8f3410..262143590 100644
--- a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js
+++ b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptions.js
@@ -61,10 +61,12 @@ function DownloadClientOptions(props) {
legend={translate('FailedDownloadHandling')}
>
+
{translate('RemoveDownloadsAlert')}
diff --git a/src/Lidarr.Api.V1/Config/DownloadClientConfigResource.cs b/src/Lidarr.Api.V1/Config/DownloadClientConfigResource.cs
index ee8d81b47..a3c3d50bd 100644
--- a/src/Lidarr.Api.V1/Config/DownloadClientConfigResource.cs
+++ b/src/Lidarr.Api.V1/Config/DownloadClientConfigResource.cs
@@ -1,4 +1,4 @@
-using Lidarr.Http.REST;
+using Lidarr.Http.REST;
using NzbDrone.Core.Configuration;
namespace Lidarr.Api.V1.Config
@@ -8,6 +8,7 @@ public class DownloadClientConfigResource : RestResource
public string DownloadClientWorkingFolders { get; set; }
public bool EnableCompletedDownloadHandling { get; set; }
public bool AutoRedownloadFailed { get; set; }
+ public bool AutoRedownloadFailedFromInteractiveSearch { get; set; }
}
public static class DownloadClientConfigResourceMapper
@@ -19,7 +20,8 @@ public static DownloadClientConfigResource ToResource(IConfigService model)
DownloadClientWorkingFolders = model.DownloadClientWorkingFolders,
EnableCompletedDownloadHandling = model.EnableCompletedDownloadHandling,
- AutoRedownloadFailed = model.AutoRedownloadFailed
+ AutoRedownloadFailed = model.AutoRedownloadFailed,
+ AutoRedownloadFailedFromInteractiveSearch = model.AutoRedownloadFailedFromInteractiveSearch
};
}
}
diff --git a/src/NzbDrone.Core/Configuration/ConfigService.cs b/src/NzbDrone.Core/Configuration/ConfigService.cs
index 89760de37..84a2bfe6d 100644
--- a/src/NzbDrone.Core/Configuration/ConfigService.cs
+++ b/src/NzbDrone.Core/Configuration/ConfigService.cs
@@ -144,6 +144,13 @@ public bool AutoRedownloadFailed
set { SetValue("AutoRedownloadFailed", value); }
}
+ public bool AutoRedownloadFailedFromInteractiveSearch
+ {
+ get { return GetValueBoolean("AutoRedownloadFailedFromInteractiveSearch", true); }
+
+ set { SetValue("AutoRedownloadFailedFromInteractiveSearch", value); }
+ }
+
public bool CreateEmptyArtistFolders
{
get { return GetValueBoolean("CreateEmptyArtistFolders", false); }
diff --git a/src/NzbDrone.Core/Configuration/IConfigService.cs b/src/NzbDrone.Core/Configuration/IConfigService.cs
index 6cef2ad88..4009ffb6d 100644
--- a/src/NzbDrone.Core/Configuration/IConfigService.cs
+++ b/src/NzbDrone.Core/Configuration/IConfigService.cs
@@ -20,6 +20,7 @@ public interface IConfigService
bool EnableCompletedDownloadHandling { get; set; }
bool AutoRedownloadFailed { get; set; }
+ bool AutoRedownloadFailedFromInteractiveSearch { get; set; }
// Media Management
bool AutoUnmonitorPreviouslyDownloadedTracks { get; set; }
diff --git a/src/NzbDrone.Core/Download/DownloadFailedEvent.cs b/src/NzbDrone.Core/Download/DownloadFailedEvent.cs
index dd4ad5751..06a52830c 100644
--- a/src/NzbDrone.Core/Download/DownloadFailedEvent.cs
+++ b/src/NzbDrone.Core/Download/DownloadFailedEvent.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Download.TrackedDownloads;
+using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Qualities;
namespace NzbDrone.Core.Download
@@ -22,5 +23,6 @@ public DownloadFailedEvent()
public Dictionary Data { get; set; }
public TrackedDownload TrackedDownload { get; set; }
public bool SkipRedownload { get; set; }
+ public ReleaseSourceType ReleaseSource { get; set; }
}
}
diff --git a/src/NzbDrone.Core/Download/FailedDownloadService.cs b/src/NzbDrone.Core/Download/FailedDownloadService.cs
index e32f28833..a710a924f 100644
--- a/src/NzbDrone.Core/Download/FailedDownloadService.cs
+++ b/src/NzbDrone.Core/Download/FailedDownloadService.cs
@@ -1,9 +1,11 @@
+using System;
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Download.TrackedDownloads;
using NzbDrone.Core.History;
using NzbDrone.Core.Messaging.Events;
+using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Download
{
@@ -117,6 +119,7 @@ public void ProcessFailed(TrackedDownload trackedDownload)
private void PublishDownloadFailedEvent(List historyItems, string message, TrackedDownload trackedDownload = null, bool skipRedownload = false)
{
var historyItem = historyItems.Last();
+ Enum.TryParse(historyItem.Data.GetValueOrDefault(EntityHistory.RELEASE_SOURCE, ReleaseSourceType.Unknown.ToString()), out ReleaseSourceType releaseSource);
var downloadFailedEvent = new DownloadFailedEvent
{
@@ -129,7 +132,8 @@ private void PublishDownloadFailedEvent(List historyItems, string
Message = message,
Data = historyItem.Data,
TrackedDownload = trackedDownload,
- SkipRedownload = skipRedownload
+ SkipRedownload = skipRedownload,
+ ReleaseSource = releaseSource
};
_eventAggregator.PublishEvent(downloadFailedEvent);
diff --git a/src/NzbDrone.Core/Download/RedownloadFailedDownloadService.cs b/src/NzbDrone.Core/Download/RedownloadFailedDownloadService.cs
index b920296ca..ac3b2e703 100644
--- a/src/NzbDrone.Core/Download/RedownloadFailedDownloadService.cs
+++ b/src/NzbDrone.Core/Download/RedownloadFailedDownloadService.cs
@@ -5,6 +5,7 @@
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Music;
+using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Download
{
@@ -41,6 +42,12 @@ public void Handle(DownloadFailedEvent message)
return;
}
+ if (message.ReleaseSource == ReleaseSourceType.InteractiveSearch && !_configService.AutoRedownloadFailedFromInteractiveSearch)
+ {
+ _logger.Debug("Auto redownloading failed albumbs from interactive search is disabled");
+ return;
+ }
+
if (message.AlbumIds.Count == 1)
{
_logger.Debug("Failed download only contains one album, searching again");
diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json
index e60cc2f3d..38ae21fe0 100644
--- a/src/NzbDrone.Core/Localization/Core/en.json
+++ b/src/NzbDrone.Core/Localization/Core/en.json
@@ -135,6 +135,9 @@
"AuthenticationRequiredWarning": "To prevent remote access without authentication, {appName} now requires authentication to be enabled. You can optionally disable authentication from local addresses.",
"Auto": "Auto",
"AutoAdd": "Auto Add",
+ "AutoRedownloadFailed": "Redownload Failed",
+ "AutoRedownloadFailedFromInteractiveSearch": "Redownload Failed from Interactive Search",
+ "AutoRedownloadFailedFromInteractiveSearchHelpText": "Automatically search for and attempt to download a different release when failed release was grabbed from interactive search",
"AutoRedownloadFailedHelpText": "Automatically search for and attempt to download a different release",
"AutoTagging": "Auto Tagging",
"AutoTaggingLoadError": "Unable to load auto tagging",