using System; using NzbDrone.Core.Repository.Quality; namespace NzbDrone.Core.Model { public class Quality : IComparable { public QualityTypes QualityType { get; set; } public Boolean Proper { get; set; } public Quality() { } public Quality(QualityTypes quality, Boolean proper) { QualityType = quality; Proper = proper; } public int CompareTo(Quality other) { if (other.QualityType > QualityType) return -1; if (other.QualityType < QualityType) return 1; if (other.QualityType == QualityType && other.Proper == Proper) return 0; if (Proper && !other.Proper) return 1; if (!Proper && other.Proper) return -1; return 0; } public static bool operator !=(Quality x, Quality y) { return !(x == y); } public static bool operator ==(Quality x, Quality y) { var xObj = (Object)x; var yObj = (object)y; if (xObj == null || yObj == null) { return xObj == yObj; } return x.CompareTo(y) == 0; } public static bool operator >(Quality x, Quality y) { return x.CompareTo(y) > 0; } public static bool operator <(Quality x, Quality y) { return x.CompareTo(y) < 1; } public static bool operator <=(Quality x, Quality y) { return x.CompareTo(y) <= 0; } public static bool operator >=(Quality x, Quality y) { return x.CompareTo(y) >= 0; } public override string ToString() { string result = QualityType.ToString(); if (Proper) { result += " [proper]"; } return result; } public override int GetHashCode() { unchecked // Overflow is fine, just wrap { int hash = 17; hash = hash * 23 + Proper.GetHashCode(); hash = hash * 23 + QualityType.GetHashCode(); return hash; } } public bool Equals(Quality other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Equals(other.QualityType, QualityType) && other.Proper.Equals(Proper); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof (Quality)) return false; return Equals((Quality) obj); } } }