Radarr/src/NzbDrone.Core/Qualities/QualityFinder.cs

65 lines
2.4 KiB
C#
Raw Normal View History

2019-07-16 02:27:35 +00:00
using System.Linq;
using NLog;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Core.Qualities
{
public static class QualityFinder
{
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(QualityFinder));
2023-08-21 03:53:11 +00:00
public static Quality FindBySourceAndResolution(QualitySource source, int resolution, Modifier modifer)
2019-07-16 02:27:35 +00:00
{
2019-09-29 20:27:54 +00:00
// Check for a perfect 3-way match
var matchingQuality = Quality.All.SingleOrDefault(q => q.Source == source && q.Resolution == resolution && q.Modifier == modifer);
2019-07-16 02:27:35 +00:00
if (matchingQuality != null)
{
return matchingQuality;
}
2019-09-29 20:27:54 +00:00
// Check for Source and Modifier Match for Qualities with Unknown Resolution
var matchingQualitiesUnknownResolution = Quality.All.Where(q => q.Source == source && (q.Resolution == 0) && q.Modifier == modifer && q != Quality.Unknown);
2019-09-29 20:27:54 +00:00
if (matchingQualitiesUnknownResolution.Any())
{
if (matchingQualitiesUnknownResolution.Count() == 1)
{
return matchingQualitiesUnknownResolution.First();
}
foreach (var quality in matchingQualitiesUnknownResolution)
{
if (quality.Source >= source)
{
Logger.Warn("Unable to find exact quality for {0}, {1}, and {2}. Using {3} as fallback", source, resolution, modifer, quality);
return quality;
}
}
}
2022-11-20 18:27:45 +00:00
// Check for Modifier match
2019-09-29 02:39:09 +00:00
var matchingModifier = Quality.All.Where(q => q.Modifier == modifer);
var matchingResolution = matchingModifier.Where(q => q.Resolution == resolution)
2019-07-16 02:27:35 +00:00
.OrderBy(q => q.Source)
.ToList();
var nearestQuality = Quality.Unknown;
foreach (var quality in matchingResolution)
{
if (quality.Source >= source)
{
nearestQuality = quality;
break;
}
}
2019-09-29 02:39:09 +00:00
Logger.Warn("Unable to find exact quality for {0}, {1}, and {2}. Using {3} as fallback", source, resolution, modifer, nearestQuality);
2019-07-16 02:27:35 +00:00
return nearestQuality;
}
}
}