Skip to content

Commit

Permalink
New: Download client option for redownloading failed releases from In…
Browse files Browse the repository at this point in the history
…teractive Search

(cherry picked from commit 87e0a7983a437a4d166aa8b9c9eaf78ea5431969)
  • Loading branch information
markus101 authored and mynameisbogdan committed Jan 9, 2024
1 parent 4c2f17f commit 1551f33
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 8 deletions.
4 changes: 3 additions & 1 deletion frontend/src/Components/Form/FormLabel.css
Expand Up @@ -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 {
Expand Down
Expand Up @@ -61,10 +61,12 @@ function DownloadClientOptions(props) {
legend={translate('FailedDownloadHandling')}
>
<Form>
<FormGroup size={sizes.MEDIUM}>
<FormLabel>
{translate('Redownload')}
</FormLabel>
<FormGroup
advancedSettings={advancedSettings}
isAdvanced={true}
size={sizes.MEDIUM}
>
<FormLabel>{translate('AutoRedownloadFailed')}</FormLabel>

<FormInputGroup
type={inputTypes.CHECK}
Expand All @@ -74,7 +76,28 @@ function DownloadClientOptions(props) {
{...settings.autoRedownloadFailed}
/>
</FormGroup>

{
settings.autoRedownloadFailed.value ?
<FormGroup
advancedSettings={advancedSettings}
isAdvanced={true}
size={sizes.MEDIUM}
>
<FormLabel>{translate('AutoRedownloadFailedFromInteractiveSearch')}</FormLabel>

<FormInputGroup
type={inputTypes.CHECK}
name="autoRedownloadFailedFromInteractiveSearch"
helpText={translate('AutoRedownloadFailedFromInteractiveSearchHelpText')}
onChange={onInputChange}
{...settings.autoRedownloadFailedFromInteractiveSearch}
/>
</FormGroup> :
null
}
</Form>

<Alert kind={kinds.INFO}>
{translate('RemoveDownloadsAlert')}
</Alert>
Expand Down
6 changes: 4 additions & 2 deletions 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
Expand All @@ -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
Expand All @@ -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
};
}
}
Expand Down
7 changes: 7 additions & 0 deletions src/NzbDrone.Core/Configuration/ConfigService.cs
Expand Up @@ -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); }
Expand Down
1 change: 1 addition & 0 deletions src/NzbDrone.Core/Configuration/IConfigService.cs
Expand Up @@ -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; }
Expand Down
2 changes: 2 additions & 0 deletions 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
Expand All @@ -22,5 +23,6 @@ public DownloadFailedEvent()
public Dictionary<string, string> Data { get; set; }
public TrackedDownload TrackedDownload { get; set; }
public bool SkipRedownload { get; set; }
public ReleaseSourceType ReleaseSource { get; set; }
}
}
6 changes: 5 additions & 1 deletion 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
{
Expand Down Expand Up @@ -117,6 +119,7 @@ public void ProcessFailed(TrackedDownload trackedDownload)
private void PublishDownloadFailedEvent(List<EntityHistory> 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
{
Expand All @@ -129,7 +132,8 @@ private void PublishDownloadFailedEvent(List<EntityHistory> historyItems, string
Message = message,
Data = historyItem.Data,
TrackedDownload = trackedDownload,
SkipRedownload = skipRedownload
SkipRedownload = skipRedownload,
ReleaseSource = releaseSource
};

_eventAggregator.PublishEvent(downloadFailedEvent);
Expand Down
7 changes: 7 additions & 0 deletions src/NzbDrone.Core/Download/RedownloadFailedDownloadService.cs
Expand Up @@ -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
{
Expand Down Expand Up @@ -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");
Expand Down
3 changes: 3 additions & 0 deletions src/NzbDrone.Core/Localization/Core/en.json
Expand Up @@ -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",
Expand Down

0 comments on commit 1551f33

Please sign in to comment.