From 04e0d3f22e9cb9aedd19c2c8a4602f686388898b Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 15 Aug 2024 06:20:25 +0300 Subject: [PATCH] Skip duplicate import list exclusions (cherry picked from commit 9af2f137f41867a29d544fad77551672a79f24b6) Closes #5003 --- .../ImportLists/ImportListExclusionController.cs | 6 +++++- .../ImportLists}/ImportListExclusionExistsValidator.cs | 10 ++++++++-- src/NzbDrone.Core/Validation/GuidValidator.cs | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) rename src/{NzbDrone.Core/ImportLists/Exclusions => Lidarr.Api.V1/ImportLists}/ImportListExclusionExistsValidator.cs (64%) diff --git a/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs index b5b30f1cd..c78bbc1ad 100644 --- a/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs +++ b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionController.cs @@ -20,7 +20,11 @@ namespace Lidarr.Api.V1.ImportLists { _importListExclusionService = importListExclusionService; - SharedValidator.RuleFor(c => c.ForeignId).NotEmpty().SetValidator(guidValidator).SetValidator(importListExclusionExistsValidator); + SharedValidator.RuleFor(c => c.ForeignId).Cascade(CascadeMode.Stop) + .NotEmpty() + .SetValidator(guidValidator) + .SetValidator(importListExclusionExistsValidator); + SharedValidator.RuleFor(c => c.ArtistName).NotEmpty(); } diff --git a/src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs similarity index 64% rename from src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs rename to src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs index 2883f473a..101e83397 100644 --- a/src/NzbDrone.Core/ImportLists/Exclusions/ImportListExclusionExistsValidator.cs +++ b/src/Lidarr.Api.V1/ImportLists/ImportListExclusionExistsValidator.cs @@ -1,6 +1,7 @@ using FluentValidation.Validators; +using NzbDrone.Core.ImportLists.Exclusions; -namespace NzbDrone.Core.ImportLists.Exclusions +namespace Lidarr.Api.V1.ImportLists { public class ImportListExclusionExistsValidator : PropertyValidator { @@ -20,7 +21,12 @@ namespace NzbDrone.Core.ImportLists.Exclusions return true; } - return !_importListExclusionService.All().Exists(s => s.ForeignId == context.PropertyValue.ToString()); + if (context.InstanceToValidate is not ImportListExclusionResource listExclusionResource) + { + return true; + } + + return !_importListExclusionService.All().Exists(v => v.ForeignId == context.PropertyValue.ToString() && v.Id != listExclusionResource.Id); } } } diff --git a/src/NzbDrone.Core/Validation/GuidValidator.cs b/src/NzbDrone.Core/Validation/GuidValidator.cs index 99a491acd..19956a2fd 100644 --- a/src/NzbDrone.Core/Validation/GuidValidator.cs +++ b/src/NzbDrone.Core/Validation/GuidValidator.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Validation return false; } - return Guid.TryParse(context.PropertyValue.ToString(), out var guidOutput); + return Guid.TryParse(context.PropertyValue.ToString(), out _); } } }