mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-26 22:46:53 -04:00
New: Quality Preferred Setting
This commit is contained in:
@@ -5,6 +5,7 @@ using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Profiles.Delay;
|
||||
using NzbDrone.Core.Qualities;
|
||||
|
||||
namespace NzbDrone.Core.DecisionEngine
|
||||
{
|
||||
@@ -12,14 +13,16 @@ namespace NzbDrone.Core.DecisionEngine
|
||||
{
|
||||
private readonly IConfigService _configService;
|
||||
private readonly IDelayProfileService _delayProfileService;
|
||||
private readonly IQualityDefinitionService _qualityDefinitionService;
|
||||
|
||||
public delegate int CompareDelegate(DownloadDecision x, DownloadDecision y);
|
||||
public delegate int CompareDelegate<TSubject, TValue>(DownloadDecision x, DownloadDecision y);
|
||||
|
||||
public DownloadDecisionComparer(IConfigService configService, IDelayProfileService delayProfileService)
|
||||
public DownloadDecisionComparer(IConfigService configService, IDelayProfileService delayProfileService, IQualityDefinitionService qualityDefinitionService)
|
||||
{
|
||||
_configService = configService;
|
||||
_delayProfileService = delayProfileService;
|
||||
_qualityDefinitionService = qualityDefinitionService;
|
||||
}
|
||||
|
||||
public int Compare(DownloadDecision x, DownloadDecision y)
|
||||
@@ -164,8 +167,25 @@ namespace NzbDrone.Core.DecisionEngine
|
||||
|
||||
private int CompareSize(DownloadDecision x, DownloadDecision y)
|
||||
{
|
||||
// TODO: Is smaller better? Smaller for usenet could mean no par2 files.
|
||||
return CompareBy(x.RemoteMovie, y.RemoteMovie, remoteEpisode => remoteEpisode.Release.Size.Round(200.Megabytes()));
|
||||
var sizeCompare = CompareBy(x.RemoteMovie, y.RemoteMovie, remoteMovie =>
|
||||
{
|
||||
var preferredSize = _qualityDefinitionService.Get(remoteMovie.ParsedMovieInfo.Quality.Quality).PreferredSize;
|
||||
|
||||
// If no value for preferred it means unlimited so fallback to sort largest is best
|
||||
if (preferredSize.HasValue && remoteMovie.Movie.Runtime > 0)
|
||||
{
|
||||
var preferredMovieSize = remoteMovie.Movie.Runtime * preferredSize.Value.Megabytes();
|
||||
|
||||
// Calculate closest to the preferred size
|
||||
return Math.Abs((remoteMovie.Release.Size - preferredMovieSize).Round(200.Megabytes())) * (-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return remoteMovie.Release.Size.Round(200.Megabytes());
|
||||
}
|
||||
});
|
||||
|
||||
return sizeCompare;
|
||||
}
|
||||
|
||||
private int ScoreFlags(IndexerFlags flags)
|
||||
|
||||
Reference in New Issue
Block a user