diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs index e22ede193..c6df33c28 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/SabnzbdTests/SabnzbdFixture.cs @@ -478,6 +478,37 @@ public void should_set_history_removes_completed_downloads_true(string historyRe downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue(); } + [TestCase("all", 0)] + [TestCase("days-archive", 15)] + [TestCase("days-delete", 15)] + public void should_set_history_removes_completed_downloads_false_for_separate_properties(string option, int number) + { + _config.Misc.history_retention_option = option; + _config.Misc.history_retention_number = number; + + var downloadClientInfo = Subject.GetStatus(); + + downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse(); + } + + [TestCase("number-archive", 10)] + [TestCase("number-delete", 10)] + [TestCase("number-archive", 0)] + [TestCase("number-delete", 0)] + [TestCase("days-archive", 3)] + [TestCase("days-delete", 3)] + [TestCase("all-archive", 0)] + [TestCase("all-delete", 0)] + public void should_set_history_removes_completed_downloads_true_for_separate_properties(string option, int number) + { + _config.Misc.history_retention_option = option; + _config.Misc.history_retention_number = number; + + var downloadClientInfo = Subject.GetStatus(); + + downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue(); + } + [TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")] [TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")] [TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")] diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs index eea96653e..05d565718 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/Sabnzbd.cs @@ -276,20 +276,7 @@ public override DownloadClientInfo GetStatus() status.OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) }; } - if (config.Misc.history_retention.IsNullOrWhiteSpace()) - { - status.RemovesCompletedDownloads = false; - } - else if (config.Misc.history_retention.EndsWith("d")) - { - int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1), - out var daysRetention); - status.RemovesCompletedDownloads = daysRetention < 14; - } - else - { - status.RemovesCompletedDownloads = config.Misc.history_retention != "0"; - } + status.RemovesCompletedDownloads = RemovesCompletedDownloads(config); return status; } @@ -531,6 +518,44 @@ private bool ContainsCategory(IEnumerable categories, string category) return categories.Contains(category); } + private bool RemovesCompletedDownloads(SabnzbdConfig config) + { + var retention = config.Misc.history_retention; + var option = config.Misc.history_retention_option; + var number = config.Misc.history_retention_number; + + switch (option) + { + case "all": + return false; + case "number-archive": + case "number-delete": + return true; + case "days-archive": + case "days-delete": + return number < 14; + case "all-archive": + case "all-delete": + return true; + } + + // TODO: Remove these checks once support for SABnzbd < 4.3 is removed + + if (retention.IsNullOrWhiteSpace()) + { + return false; + } + + if (retention.EndsWith("d")) + { + int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1), + out var daysRetention); + return daysRetention < 14; + } + + return retention != "0"; + } + private bool ValidatePath(DownloadClientItem downloadClientItem) { var downloadItemOutputPath = downloadClientItem.OutputPath; diff --git a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs index 189b08257..4c678ce75 100644 --- a/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs +++ b/src/NzbDrone.Core/Download/Clients/Sabnzbd/SabnzbdCategory.cs @@ -30,6 +30,8 @@ public class SabnzbdConfigMisc public bool enable_date_sorting { get; set; } public bool pre_check { get; set; } public string history_retention { get; set; } + public string history_retention_option { get; set; } + public int history_retention_number { get; set; } } public class SabnzbdCategory