2014-06-08 08:22:55 +00:00
|
|
|
|
using System.Collections.Generic;
|
2018-08-05 14:28:05 +00:00
|
|
|
|
using System.Linq;
|
2014-01-18 11:44:36 +00:00
|
|
|
|
using NzbDrone.Common.EnsureThat;
|
2018-08-05 14:28:05 +00:00
|
|
|
|
using NzbDrone.Core.CustomFormats;
|
|
|
|
|
using NzbDrone.Core.Datastore.Migration;
|
|
|
|
|
using NzbDrone.Core.Instrumentation;
|
2014-06-08 08:22:55 +00:00
|
|
|
|
using NzbDrone.Core.Profiles;
|
2014-01-18 11:44:36 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Qualities
|
|
|
|
|
{
|
2018-08-05 14:28:05 +00:00
|
|
|
|
public class QualityModelComparer : IComparer<Quality>, IComparer<QualityModel>, IComparer<CustomFormat>, IComparer<List<CustomFormat>>
|
2014-01-18 11:44:36 +00:00
|
|
|
|
{
|
2014-06-08 08:22:55 +00:00
|
|
|
|
private readonly Profile _profile;
|
2014-01-18 11:44:36 +00:00
|
|
|
|
|
2014-06-08 08:22:55 +00:00
|
|
|
|
public QualityModelComparer(Profile profile)
|
2014-01-18 11:44:36 +00:00
|
|
|
|
{
|
2014-06-08 08:22:55 +00:00
|
|
|
|
Ensure.That(profile, () => profile).IsNotNull();
|
|
|
|
|
Ensure.That(profile.Items, () => profile.Items).HasItems();
|
2014-01-18 11:44:36 +00:00
|
|
|
|
|
2014-06-08 08:22:55 +00:00
|
|
|
|
_profile = profile;
|
2014-01-18 11:44:36 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int Compare(Quality left, Quality right)
|
|
|
|
|
{
|
2014-06-08 08:22:55 +00:00
|
|
|
|
int leftIndex = _profile.Items.FindIndex(v => v.Quality == left);
|
|
|
|
|
int rightIndex = _profile.Items.FindIndex(v => v.Quality == right);
|
2014-01-18 11:44:36 +00:00
|
|
|
|
|
|
|
|
|
return leftIndex.CompareTo(rightIndex);
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-05 14:28:05 +00:00
|
|
|
|
public int Compare(List<CustomFormat> left, List<CustomFormat> right)
|
|
|
|
|
{
|
|
|
|
|
List<int> leftIndicies = GetIndicies(left, _profile);
|
|
|
|
|
List<int> rightIndicies = GetIndicies(right, _profile);
|
|
|
|
|
|
|
|
|
|
int leftTotal = leftIndicies.Sum();
|
|
|
|
|
int rightTotal = rightIndicies.Sum();
|
|
|
|
|
|
|
|
|
|
return leftTotal.CompareTo(rightTotal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static List<int> GetIndicies(List<CustomFormat> formats, Profile profile)
|
|
|
|
|
{
|
2018-09-10 19:25:10 +00:00
|
|
|
|
return formats.WithNone().Select(f => profile.FormatItems.FindIndex(v => Equals(v.Format, f))).ToList();
|
2018-08-05 14:28:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int Compare(CustomFormat left, CustomFormat right)
|
|
|
|
|
{
|
|
|
|
|
int leftIndex = _profile.FormatItems.FindIndex(v => Equals(v.Format, left));
|
|
|
|
|
int rightIndex = _profile.FormatItems.FindIndex(v => Equals(v.Format, right));
|
|
|
|
|
|
|
|
|
|
return leftIndex.CompareTo(rightIndex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int Compare(List<CustomFormat> left, CustomFormat right)
|
|
|
|
|
{
|
2018-09-10 19:25:10 +00:00
|
|
|
|
left = left.WithNone();
|
2018-08-05 14:28:05 +00:00
|
|
|
|
|
|
|
|
|
var leftIndicies = GetIndicies(left, _profile);
|
|
|
|
|
var rightIndex = _profile.FormatItems.FindIndex(v => Equals(v.Format, right));
|
|
|
|
|
|
|
|
|
|
return leftIndicies.Select(i => i.CompareTo(rightIndex)).Sum();
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-18 11:44:36 +00:00
|
|
|
|
public int Compare(QualityModel left, QualityModel right)
|
|
|
|
|
{
|
|
|
|
|
int result = Compare(left.Quality, right.Quality);
|
|
|
|
|
|
|
|
|
|
if (result == 0)
|
2014-09-01 02:28:42 +00:00
|
|
|
|
{
|
2018-08-05 14:28:05 +00:00
|
|
|
|
result = Compare(left.CustomFormats, right.CustomFormats);
|
|
|
|
|
|
|
|
|
|
if (result == 0)
|
|
|
|
|
{
|
|
|
|
|
result = left.Revision.CompareTo(right.Revision);
|
|
|
|
|
}
|
2014-09-01 02:28:42 +00:00
|
|
|
|
}
|
2014-01-18 11:44:36 +00:00
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|