parent
575c5af1f8
commit
7e79ccd710
@ -0,0 +1,38 @@
|
|||||||
|
using FluentAssertions;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using NzbDrone.Core.Qualities;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test.Qualities
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class QualityFinderFixture
|
||||||
|
{
|
||||||
|
[TestCase(QualitySource.Television, 480)]
|
||||||
|
[TestCase(QualitySource.Unknown, 480)]
|
||||||
|
public void should_return_SDTV(QualitySource source, int resolution)
|
||||||
|
{
|
||||||
|
QualityFinder.FindBySourceAndResolution(source, resolution).Should().Be(Quality.SDTV);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(QualitySource.Television, 720)]
|
||||||
|
[TestCase(QualitySource.Unknown, 720)]
|
||||||
|
public void should_return_HDTV_720p(QualitySource source, int resolution)
|
||||||
|
{
|
||||||
|
QualityFinder.FindBySourceAndResolution(source, resolution).Should().Be(Quality.HDTV720p);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(QualitySource.Television, 1080)]
|
||||||
|
[TestCase(QualitySource.Unknown, 1080)]
|
||||||
|
public void should_return_HDTV_1080p(QualitySource source, int resolution)
|
||||||
|
{
|
||||||
|
QualityFinder.FindBySourceAndResolution(source, resolution).Should().Be(Quality.HDTV1080p);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(QualitySource.Bluray, 720)]
|
||||||
|
[TestCase(QualitySource.DVD, 720)]
|
||||||
|
public void should_return_Bluray720p(QualitySource source, int resolution)
|
||||||
|
{
|
||||||
|
QualityFinder.FindBySourceAndResolution(source, resolution).Should().Be(Quality.Bluray720p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
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));
|
||||||
|
|
||||||
|
public static Quality FindBySourceAndResolution(QualitySource source, int resolution)
|
||||||
|
{
|
||||||
|
var matchingQuality = Quality.All.SingleOrDefault(q => q.Source == source && q.Resolution == resolution);
|
||||||
|
|
||||||
|
if (matchingQuality != null)
|
||||||
|
{
|
||||||
|
return matchingQuality;
|
||||||
|
}
|
||||||
|
|
||||||
|
var matchingResolution = Quality.All.Where(q => q.Resolution == resolution)
|
||||||
|
.OrderBy(q => q.Source)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var nearestQuality = Quality.Unknown;
|
||||||
|
|
||||||
|
foreach (var quality in matchingResolution)
|
||||||
|
{
|
||||||
|
if (quality.Source >= source)
|
||||||
|
{
|
||||||
|
nearestQuality = quality;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.Warn("Unable to find exact quality for {0} and {1}. Using {2} as fallback", source, resolution, nearestQuality);
|
||||||
|
|
||||||
|
return nearestQuality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue