Add EnabledForTags to releaseProfileService that returns all enabled release profiles for given tags and indexer

This commit is contained in:
Jacob 2019-06-11 17:48:31 -05:00 committed by Taloth Saldono
parent a51c8cee44
commit a4086fd161
10 changed files with 77 additions and 78 deletions

View File

@ -55,7 +55,7 @@ namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService
.Setup(s => s.AllForTags(It.IsAny<HashSet<int>>())) .Setup(s => s.AllForTags(It.IsAny<HashSet<int>>()))
.Returns(new List<ReleaseProfile>()); .Returns(new List<ReleaseProfile>());
Subject.Calculate(_series, _title).Should().Be(0); Subject.Calculate(_series, _title, 0).Should().Be(0);
} }
[Test] [Test]
@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService
{ {
GivenMatchingTerms(); GivenMatchingTerms();
Subject.Calculate(_series, _title).Should().Be(0); Subject.Calculate(_series, _title, 0).Should().Be(0);
} }
[Test] [Test]
@ -71,7 +71,7 @@ namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService
{ {
GivenMatchingTerms("x264"); GivenMatchingTerms("x264");
Subject.Calculate(_series, _title).Should().Be(5); Subject.Calculate(_series, _title, 0).Should().Be(5);
} }
[Test] [Test]
@ -79,7 +79,7 @@ namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService
{ {
GivenMatchingTerms("x265"); GivenMatchingTerms("x265");
Subject.Calculate(_series, _title).Should().Be(-10); Subject.Calculate(_series, _title, 0).Should().Be(-10);
} }
[Test] [Test]
@ -89,7 +89,7 @@ namespace NzbDrone.Core.Test.Profiles.Releases.PreferredWordService
GivenMatchingTerms("x264"); GivenMatchingTerms("x264");
Subject.Calculate(_series, _title).Should().Be(10); Subject.Calculate(_series, _title, 0).Should().Be(10);
} }
} }
} }

View File

@ -41,7 +41,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
languageProfile, languageProfile,
file.Quality, file.Quality,
file.Language, file.Language,
_preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName()), _preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName(), subject.Release.IndexerId),
subject.ParsedEpisodeInfo.Quality, subject.ParsedEpisodeInfo.Quality,
subject.PreferredWordScore)) subject.PreferredWordScore))
{ {

View File

@ -44,7 +44,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
var languageProfile = subject.Series.LanguageProfile.Value; var languageProfile = subject.Series.LanguageProfile.Value;
_logger.Debug("Checking if existing release in queue meets cutoff. Queued: {0} - {1}", remoteEpisode.ParsedEpisodeInfo.Quality, remoteEpisode.ParsedEpisodeInfo.Language); _logger.Debug("Checking if existing release in queue meets cutoff. Queued: {0} - {1}", remoteEpisode.ParsedEpisodeInfo.Quality, remoteEpisode.ParsedEpisodeInfo.Language);
var queuedItemPreferredWordScore = _preferredWordServiceCalculator.Calculate(subject.Series, queueItem.Title); var queuedItemPreferredWordScore = _preferredWordServiceCalculator.Calculate(subject.Series, queueItem.Title, subject.Release.IndexerId);
if (!_upgradableSpecification.CutoffNotMet(qualityProfile, if (!_upgradableSpecification.CutoffNotMet(qualityProfile,
languageProfile, languageProfile,

View File

@ -31,18 +31,10 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
_logger.Debug("Checking if release meets restrictions: {0}", subject); _logger.Debug("Checking if release meets restrictions: {0}", subject);
var title = subject.Release.Title; var title = subject.Release.Title;
List<ReleaseProfile> restrictions = _releaseProfileService.AllForTags(subject.Series.Tags); var releaseProfiles = _releaseProfileService.EnabledForTags(subject.Series.Tags, subject.Release.IndexerId);
foreach (ReleaseProfile restriction in restrictions) var required = releaseProfiles.Where(r => r.Required.IsNotNullOrWhiteSpace());
{ var ignored = releaseProfiles.Where(r => r.Ignored.IsNotNullOrWhiteSpace());
// TODO: attach Enabled and IndexerId fields to restriction
/*if (!restriction.Enabled || restriction.IndexerId != subject.Release.IndexerId)
{
continue;
}*/
var required = restrictions.Where(r => r.Required.IsNotNullOrWhiteSpace());
var ignored = restrictions.Where(r => r.Ignored.IsNotNullOrWhiteSpace());
var keyValueRegex = new Regex(@"\b\w+:\w+\b"); var keyValueRegex = new Regex(@"\b\w+:\w+\b");
@ -107,7 +99,6 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
return Decision.Reject("Contains these ignored terms: {0}", terms); return Decision.Reject("Contains these ignored terms: {0}", terms);
} }
} }
}
_logger.Debug("[{0}] No restrictions apply, allowing", subject); _logger.Debug("[{0}] No restrictions apply, allowing", subject);
return Decision.Accept(); return Decision.Accept();
} }

View File

@ -66,7 +66,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
languageProfile, languageProfile,
file.Quality, file.Quality,
file.Language, file.Language,
_preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName()), _preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName(), subject.Release.IndexerId),
subject.ParsedEpisodeInfo.Quality, subject.ParsedEpisodeInfo.Quality,
subject.ParsedEpisodeInfo.Language, subject.ParsedEpisodeInfo.Language,
subject.PreferredWordScore); subject.PreferredWordScore);

View File

@ -55,7 +55,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications.RssSync
// The series will be the same as the one in history since it's the same episode. // The series will be the same as the one in history since it's the same episode.
// Instead of fetching the series from the DB reuse the known series. // Instead of fetching the series from the DB reuse the known series.
var preferredWordScore = _preferredWordServiceCalculator.Calculate(subject.Series, mostRecent.SourceTitle); var preferredWordScore = _preferredWordServiceCalculator.Calculate(subject.Series, mostRecent.SourceTitle, subject.Release.IndexerId);
var cutoffUnmet = _upgradableSpecification.CutoffNotMet( var cutoffUnmet = _upgradableSpecification.CutoffNotMet(
subject.Series.QualityProfile, subject.Series.QualityProfile,

View File

@ -38,7 +38,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
subject.Series.LanguageProfile, subject.Series.LanguageProfile,
file.Quality, file.Quality,
file.Language, file.Language,
_preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName()), _preferredWordServiceCalculator.Calculate(subject.Series, file.GetSceneOrFileName(), subject.Release.IndexerId),
subject.ParsedEpisodeInfo.Quality, subject.ParsedEpisodeInfo.Quality,
subject.ParsedEpisodeInfo.Language, subject.ParsedEpisodeInfo.Language,
subject.PreferredWordScore)) subject.PreferredWordScore))

View File

@ -14,7 +14,7 @@ namespace NzbDrone.Core.Download.Aggregation.Aggregators
public RemoteEpisode Aggregate(RemoteEpisode remoteEpisode) public RemoteEpisode Aggregate(RemoteEpisode remoteEpisode)
{ {
remoteEpisode.PreferredWordScore = _preferredWordServiceCalculator.Calculate(remoteEpisode.Series, remoteEpisode.Release.Title); remoteEpisode.PreferredWordScore = _preferredWordServiceCalculator.Calculate(remoteEpisode.Series, remoteEpisode.Release.Title, remoteEpisode.Release.IndexerId);
return remoteEpisode; return remoteEpisode;
} }

View File

@ -8,7 +8,7 @@ namespace NzbDrone.Core.Profiles.Releases
{ {
public interface IPreferredWordService public interface IPreferredWordService
{ {
int Calculate(Series series, string title); int Calculate(Series series, string title, int indexerId);
List<string> GetMatchingPreferredWords(Series series, string title); List<string> GetMatchingPreferredWords(Series series, string title);
} }
@ -25,11 +25,11 @@ namespace NzbDrone.Core.Profiles.Releases
_logger = logger; _logger = logger;
} }
public int Calculate(Series series, string title) public int Calculate(Series series, string title, int indexerId)
{ {
_logger.Trace("Calculating preferred word score for '{0}'", title); _logger.Trace("Calculating preferred word score for '{0}'", title);
var releaseProfiles = _releaseProfileService.AllForTags(series.Tags); var releaseProfiles = _releaseProfileService.EnabledForTags(series.Tags, indexerId);
var matchingPairs = new List<KeyValuePair<string, int>>(); var matchingPairs = new List<KeyValuePair<string, int>>();
foreach (var releaseProfile in releaseProfiles) foreach (var releaseProfile in releaseProfiles)
@ -54,7 +54,7 @@ namespace NzbDrone.Core.Profiles.Releases
public List<string> GetMatchingPreferredWords(Series series, string title) public List<string> GetMatchingPreferredWords(Series series, string title)
{ {
var releaseProfiles = _releaseProfileService.AllForTags(series.Tags); var releaseProfiles = _releaseProfileService.EnabledForTags(series.Tags, 0);
var matchingPairs = new List<KeyValuePair<string, int>>(); var matchingPairs = new List<KeyValuePair<string, int>>();
_logger.Trace("Calculating preferred word score for '{0}'", title); _logger.Trace("Calculating preferred word score for '{0}'", title);

View File

@ -10,6 +10,7 @@ namespace NzbDrone.Core.Profiles.Releases
List<ReleaseProfile> All(); List<ReleaseProfile> All();
List<ReleaseProfile> AllForTag(int tagId); List<ReleaseProfile> AllForTag(int tagId);
List<ReleaseProfile> AllForTags(HashSet<int> tagIds); List<ReleaseProfile> AllForTags(HashSet<int> tagIds);
List<ReleaseProfile> EnabledForTags(HashSet<int> tagIds, int indexerId);
ReleaseProfile Get(int id); ReleaseProfile Get(int id);
void Delete(int id); void Delete(int id);
ReleaseProfile Add(ReleaseProfile restriction); ReleaseProfile Add(ReleaseProfile restriction);
@ -42,6 +43,13 @@ namespace NzbDrone.Core.Profiles.Releases
return _repo.All().Where(r => r.Tags.Intersect(tagIds).Any() || r.Tags.Empty()).ToList(); return _repo.All().Where(r => r.Tags.Intersect(tagIds).Any() || r.Tags.Empty()).ToList();
} }
public List<ReleaseProfile> EnabledForTags(HashSet<int> tagIds, int indexerId)
{
return (List<ReleaseProfile>)AllForTags(tagIds)
.Where(r => r.Enabled)
.Where(r => r.IndexerId == indexerId || r.IndexerId == 0);
}
public ReleaseProfile Get(int id) public ReleaseProfile Get(int id)
{ {
return _repo.Get(id); return _repo.Get(id);