basic key:value restriction matching outline

This commit is contained in:
Jacob 2019-06-10 23:55:44 -05:00 committed by Taloth Saldono
parent 5cb1896af0
commit adf8b5c813
1 changed files with 40 additions and 1 deletions

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.IndexerSearch.Definitions;
@ -43,11 +44,48 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
var required = restrictions.Where(r => r.Required.IsNotNullOrWhiteSpace());
var ignored = restrictions.Where(r => r.Ignored.IsNotNullOrWhiteSpace());
var keyValueRegex = new Regex(@"\b\w+:\w+\b");
foreach (var r in required)
{
var requiredTerms = r.Required.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
var foundTerms = ContainsAny(requiredTerms, title);
// separate key-value terms and normal terms
var reqKeyValues = requiredTerms.Where(kv => keyValueRegex.IsMatch(kv)).ToList();
var reqTitleTerms = requiredTerms.Where(t => !keyValueRegex.IsMatch(t)).ToList();
// check title terms
var foundTerms = ContainsAny(reqTitleTerms, title);
// check key-value terms
foreach (var kv in reqKeyValues)
{
var key = kv.Split(':')[0];
var value = kv.Split(':')[1];
switch (key)
{
case "origin":
var origin = subject.Release.Origin;
if (origin.IsNotNullOrWhiteSpace())
{
if (string.Equals(origin, value, StringComparison.InvariantCultureIgnoreCase))
{
foundTerms.Add(kv);
}
}
else
{
_logger.Debug("{0} not found in release", key);
}
break;
default:
_logger.Debug("{0} is not a supported key", key);
break;
}
}
if (foundTerms.Empty())
{
var terms = string.Join(", ", requiredTerms);
@ -56,6 +94,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
}
}
foreach (var r in ignored)
{
var ignoredTerms = r.Ignored.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();