Skip to content

Commit 549c5c6

Browse files
author
Meyn
committed
Implement QueueCleaner Indexer options
1 parent 5878701 commit 549c5c6

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

Tubifarry/Notifications/QueueCleaner/QueueCleaner.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using NzbDrone.Core.Download;
55
using NzbDrone.Core.Download.TrackedDownloads;
66
using NzbDrone.Core.History;
7+
using NzbDrone.Core.Indexers;
78
using NzbDrone.Core.MediaFiles;
89
using NzbDrone.Core.MediaFiles.Events;
910
using NzbDrone.Core.Messaging.Events;
@@ -26,16 +27,18 @@ public class QueueCleaner : NotificationBase<QueueCleanerSettings>
2627
private readonly IHistoryService _historyService;
2728
private readonly IEventAggregator _eventAggregator;
2829
private readonly INamingConfigService _namingConfig;
30+
private readonly IIndexerFactory _indexerFactory;
2931

3032
public override string Name => "Queue Cleaner";
3133

3234
public override string Link => "";
3335

3436
public override ProviderMessage Message => new("Queue Cleaner automatically processes items that failed to import. It can rename, blocklist, or remove items based on your settings.", ProviderMessageType.Info);
3537

36-
public QueueCleaner(IDiskProvider diskProvider, IHistoryService historyService, INamingConfigService namingConfig, IEventAggregator eventAggregator, ICompletedDownloadService completedDownloadService, Logger logger)
38+
public QueueCleaner(IDiskProvider diskProvider, IHistoryService historyService, INamingConfigService namingConfig, IEventAggregator eventAggregator, IIndexerFactory indexerFactory, ICompletedDownloadService completedDownloadService, Logger logger)
3739
{
3840
_logger = logger;
41+
_indexerFactory = indexerFactory;
3942
_diskProvider = diskProvider;
4043
_eventAggregator = eventAggregator;
4144
_completedDownloadService = completedDownloadService;
@@ -56,6 +59,12 @@ internal void CleanImport(AlbumImportIncompleteEvent message)
5659
if (!trackedDownload.IsTrackable || trackedDownload.State != TrackedDownloadState.ImportFailed || !trackedDownload.DownloadItem.CanMoveFiles)
5760
return;
5861

62+
if (Settings.Indexers?.Any() == true && !Settings.Indexers.Contains(trackedDownload.Indexer))
63+
{
64+
_logger.Debug($"Skipping queue cleaning for download '{trackedDownload.DownloadItem.Title}'. Indexer '{trackedDownload.Indexer}' is not in list");
65+
return;
66+
}
67+
5968
switch (CheckImport(trackedDownload))
6069
{
6170
case ImportFailureReason.FailedBecauseOfMissingTracks:
@@ -82,6 +91,7 @@ private void HandleFailure(TrackedDownload trackedDownload, int importCleaningOp
8291
if (importCleaningOption != (int)requiredOption && importCleaningOption != (int)ImportCleaningOptions.Always)
8392
return;
8493

94+
8595
if (Settings.RenameOption != (int)RenameOptions.DoNotRename && Rename(trackedDownload))
8696
{
8797
Retry(trackedDownload);
@@ -182,7 +192,7 @@ private void Blocklist(TrackedDownload item)
182192
item.State = TrackedDownloadState.DownloadFailed;
183193

184194
List<EntityHistory> grabbedItems = _historyService.Find(item.DownloadItem.DownloadId, EntityHistoryEventType.Grabbed).ToList();
185-
EntityHistory historyItem = grabbedItems.Last();
195+
EntityHistory historyItem = grabbedItems[^1];
186196

187197
_ = Enum.TryParse(historyItem.Data.GetValueOrDefault(EntityHistory.RELEASE_SOURCE, ReleaseSourceType.Unknown.ToString()), out ReleaseSourceType releaseSource);
188198

@@ -231,7 +241,26 @@ private static ImportFailureReason CheckImport(TrackedDownload trackedDownload)
231241

232242
public override void OnImportFailure(AlbumDownloadMessage message) => base.OnImportFailure(message);
233243

234-
public override ValidationResult Test() => new();
244+
public override ValidationResult Test()
245+
{
246+
ValidationResult result = new();
247+
IEnumerable<string> validProviders = _indexerFactory.GetAvailableProviders().Select(x => x.Name);
248+
249+
if (Settings.Indexers?.Any() == true)
250+
{
251+
List<string> invalidProviders = Settings.Indexers
252+
.Where(indexer => !validProviders.Contains(indexer, StringComparer.OrdinalIgnoreCase))
253+
.ToList();
254+
255+
if (invalidProviders.Any())
256+
{
257+
string errorMessage = $"The following indexers are not valid or available: {string.Join(", ", invalidProviders)}";
258+
result.Errors.Add(new ValidationFailure(nameof(Settings.Indexers), errorMessage, Settings.Indexers));
259+
}
260+
}
261+
262+
return result;
263+
}
235264

236265
public enum ImportFailureReason
237266
{

Tubifarry/Notifications/QueueCleaner/QueueCleanerSettings.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ public class QueueCleanerSettings : IProviderConfig
2626
[FieldDefinition(4, Label = "Retry Finding Release", Type = FieldType.Checkbox, HelpText = "Retry searching for the release if the import fails during queue cleaning.")]
2727
public bool RetryFindingRelease { get; set; } = true;
2828

29+
[FieldDefinition(5, Label = "Indexers", Type = FieldType.Tag, HelpText = "Names of indexers to watch. Leave empty to use all available indexers.")]
30+
public IEnumerable<string> Indexers { get; set; } = new List<string>();
31+
2932
public NzbDroneValidationResult Validate() => new(Validator.Validate(this));
3033
}
3134

0 commit comments

Comments
 (0)