New: Except language option for Language Custom Formats

(cherry picked from commit 1584311914eed697fdd0f143951f4adfe3403351)

Closes #10388
pull/10384/head
Mark McDowall 6 months ago committed by Bogdan
parent a3faa9ed5f
commit 593b943cb0

@ -42,6 +42,26 @@ namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
Subject.IsSatisfiedBy(_input).Should().BeTrue(); Subject.IsSatisfiedBy(_input).Should().BeTrue();
} }
[Test]
public void should_match_language_if_other_languages_are_present()
{
Subject.Value = Language.French.Id;
Subject.ExceptLanguage = true;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
[Test]
public void should_match_language_if_not_original_language_is_present()
{
Subject.Value = Language.Original.Id;
Subject.ExceptLanguage = true;
Subject.Negate = false;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
[Test] [Test]
public void should_not_match_different_language() public void should_not_match_different_language()
{ {
@ -68,5 +88,15 @@ namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
Subject.IsSatisfiedBy(_input).Should().BeTrue(); Subject.IsSatisfiedBy(_input).Should().BeTrue();
} }
[Test]
public void should_not_match_negate_language_if_other_languages_are_present()
{
Subject.Value = Language.Spanish.Id;
Subject.ExceptLanguage = true;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeFalse();
}
} }
} }

@ -67,5 +67,15 @@ namespace NzbDrone.Core.Test.CustomFormats.Specifications.LanguageSpecification
Subject.IsSatisfiedBy(_input).Should().BeTrue(); Subject.IsSatisfiedBy(_input).Should().BeTrue();
} }
[Test]
public void should_match_negated_except_language_if_language_is_only_present_language()
{
Subject.Value = Language.French.Id;
Subject.ExceptLanguage = true;
Subject.Negate = true;
Subject.IsSatisfiedBy(_input).Should().BeTrue();
}
} }
} }

@ -30,6 +30,9 @@ namespace NzbDrone.Core.CustomFormats
[FieldDefinition(1, Label = "Language", Type = FieldType.Select, SelectOptions = typeof(LanguageFieldConverter))] [FieldDefinition(1, Label = "Language", Type = FieldType.Select, SelectOptions = typeof(LanguageFieldConverter))]
public int Value { get; set; } public int Value { get; set; }
[FieldDefinition(1, Label = "CustomFormatsSpecificationExceptLanguage", HelpText = "CustomFormatsSpecificationExceptLanguageHelpText", Type = FieldType.Checkbox)]
public bool ExceptLanguage { get; set; }
public override bool IsSatisfiedBy(CustomFormatInput input) public override bool IsSatisfiedBy(CustomFormatInput input)
{ {
if (Negate) if (Negate)
@ -46,7 +49,12 @@ namespace NzbDrone.Core.CustomFormats
? input.Movie.MovieMetadata.Value.OriginalLanguage ? input.Movie.MovieMetadata.Value.OriginalLanguage
: (Language)Value; : (Language)Value;
return input?.Languages?.Contains(comparedLanguage) ?? false; if (ExceptLanguage)
{
return input.Languages?.Any(l => l != comparedLanguage) ?? false;
}
return input.Languages?.Contains(comparedLanguage) ?? false;
} }
private bool IsSatisfiedByWithNegate(CustomFormatInput input) private bool IsSatisfiedByWithNegate(CustomFormatInput input)
@ -55,6 +63,11 @@ namespace NzbDrone.Core.CustomFormats
? input.Movie.MovieMetadata.Value.OriginalLanguage ? input.Movie.MovieMetadata.Value.OriginalLanguage
: (Language)Value; : (Language)Value;
if (ExceptLanguage)
{
return !input.Languages?.Any(l => l != comparedLanguage) ?? false;
}
return !input.Languages?.Contains(comparedLanguage) ?? false; return !input.Languages?.Contains(comparedLanguage) ?? false;
} }

@ -264,6 +264,8 @@
"CustomFormatsSettings": "Custom Formats Settings", "CustomFormatsSettings": "Custom Formats Settings",
"CustomFormatsSettingsSummary": "Custom Formats and Settings", "CustomFormatsSettingsSummary": "Custom Formats and Settings",
"CustomFormatsSettingsTriggerInfo": "A Custom Format will be applied to a release or file when it matches at least one of each of the different condition types chosen.", "CustomFormatsSettingsTriggerInfo": "A Custom Format will be applied to a release or file when it matches at least one of each of the different condition types chosen.",
"CustomFormatsSpecificationExceptLanguage": "Except Language",
"CustomFormatsSpecificationExceptLanguageHelpText": "Matches if any language other than the selected language is present",
"CustomFormatsSpecificationFlag": "Flag", "CustomFormatsSpecificationFlag": "Flag",
"CustomFormatsSpecificationRegularExpression": "Regular Expression", "CustomFormatsSpecificationRegularExpression": "Regular Expression",
"CustomFormatsSpecificationRegularExpressionHelpText": "Custom Format RegEx is Case Insensitive", "CustomFormatsSpecificationRegularExpressionHelpText": "Custom Format RegEx is Case Insensitive",

Loading…
Cancel
Save