From b05bd685bc1bbd04d4b25b83a9fdd4ab3c4651ee Mon Sep 17 00:00:00 2001 From: ta264 Date: Tue, 16 Nov 2021 21:06:16 +0000 Subject: [PATCH] New: Make monitoring existing books on an import list optional --- .../ImportLists/EditImportListModalContent.js | 15 +++++++++++++++ .../Migration/017_import_list_monitor_existing.cs | 14 ++++++++++++++ .../ImportLists/ImportListDefinition.cs | 1 + .../ImportLists/ImportListSyncService.cs | 4 ++-- src/NzbDrone.Core/Localization/Core/en.json | 4 +++- .../ImportLists/ImportListResource.cs | 3 +++ 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/NzbDrone.Core/Datastore/Migration/017_import_list_monitor_existing.cs diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js index cb2857bdf..916999bda 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js +++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js @@ -73,6 +73,7 @@ function EditImportListModalContent(props) { name, enableAutomaticAdd, shouldMonitor, + shouldMonitorExisting, shouldSearch, rootFolderPath, qualityProfileId, @@ -167,6 +168,20 @@ function EditImportListModalContent(props) { /> + + + {translate('ShouldMonitorExisting')} + + + + + {translate('SearchForNewItems')} diff --git a/src/NzbDrone.Core/Datastore/Migration/017_import_list_monitor_existing.cs b/src/NzbDrone.Core/Datastore/Migration/017_import_list_monitor_existing.cs new file mode 100644 index 000000000..1fe332d16 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/017_import_list_monitor_existing.cs @@ -0,0 +1,14 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(17)] + public class ImportListMonitorExisting : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Alter.Table("ImportLists").AddColumn("ShouldMonitorExisting").AsInt32().WithDefaultValue(0); + } + } +} diff --git a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs index 506ccdca3..849b5200b 100644 --- a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs +++ b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs @@ -6,6 +6,7 @@ public class ImportListDefinition : ProviderDefinition { public bool EnableAutomaticAdd { get; set; } public ImportListMonitorType ShouldMonitor { get; set; } + public bool ShouldMonitorExisting { get; set; } public bool ShouldSearch { get; set; } public int ProfileId { get; set; } public int MetadataProfileId { get; set; } diff --git a/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs b/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs index 81b59a0d6..bd9662e0c 100644 --- a/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs +++ b/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs @@ -196,7 +196,7 @@ private void ProcessBookReport(ImportListDefinition importList, ImportListItemIn { _logger.Debug("{0} [{1}] Rejected, Book Exists in DB. Ensuring Book and Author monitored.", report.EditionGoodreadsId, report.Book); - if (importList.ShouldMonitor != ImportListMonitorType.None) + if (importList.ShouldMonitorExisting && importList.ShouldMonitor != ImportListMonitorType.None) { if (!existingBook.Monitored) { @@ -307,7 +307,7 @@ private Author ProcessAuthorReport(ImportListDefinition importList, ImportListIt { _logger.Debug("{0} [{1}] Rejected, Author Exists in DB. Ensuring Author monitored", report.AuthorGoodreadsId, report.Author); - if (!existingAuthor.Monitored) + if (importList.ShouldMonitorExisting && !existingAuthor.Monitored) { existingAuthor.Monitored = true; _authorService.UpdateAuthor(existingAuthor); diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 4d7ec792e..aff7febff 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -569,7 +569,9 @@ "SetPermissionsLinuxHelpTextWarning": "If you're unsure what these settings do, do not alter them.", "Settings": "Settings", "ShortDateFormat": "Short Date Format", - "ShouldMonitorHelpText": "Monitor authors and books added from this list", + "ShouldMonitorHelpText": "Monitor new authors and books added from this list", + "ShouldMonitorExisting": "Monitor existing books", + "ShouldMonitorExistingHelpText": "Automatically monitor books on this list which are already in Readarr", "ShouldSearchHelpText": "Search indexers for newly added items. Use with caution for large lists.", "ShowBanners": "Show Banners", "ShowBannersHelpText": "Show banners instead of names", diff --git a/src/Readarr.Api.V1/ImportLists/ImportListResource.cs b/src/Readarr.Api.V1/ImportLists/ImportListResource.cs index 65042ca8b..b87a69e52 100644 --- a/src/Readarr.Api.V1/ImportLists/ImportListResource.cs +++ b/src/Readarr.Api.V1/ImportLists/ImportListResource.cs @@ -6,6 +6,7 @@ public class ImportListResource : ProviderResource { public bool EnableAutomaticAdd { get; set; } public ImportListMonitorType ShouldMonitor { get; set; } + public bool ShouldMonitorExisting { get; set; } public bool ShouldSearch { get; set; } public string RootFolderPath { get; set; } public int QualityProfileId { get; set; } @@ -27,6 +28,7 @@ public override ImportListResource ToResource(ImportListDefinition definition) resource.EnableAutomaticAdd = definition.EnableAutomaticAdd; resource.ShouldMonitor = definition.ShouldMonitor; + resource.ShouldMonitorExisting = definition.ShouldMonitorExisting; resource.ShouldSearch = definition.ShouldSearch; resource.RootFolderPath = definition.RootFolderPath; resource.QualityProfileId = definition.ProfileId; @@ -48,6 +50,7 @@ public override ImportListDefinition ToModel(ImportListResource resource) definition.EnableAutomaticAdd = resource.EnableAutomaticAdd; definition.ShouldMonitor = resource.ShouldMonitor; + definition.ShouldMonitorExisting = resource.ShouldMonitorExisting; definition.ShouldSearch = resource.ShouldSearch; definition.RootFolderPath = resource.RootFolderPath; definition.ProfileId = resource.QualityProfileId;