using System; using Jellyfin.Data.Enums; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; namespace Emby.Server.Implementations.Sorting; /// /// Class providing comparison for official ratings. /// public class OfficialRatingComparer : IBaseItemComparer { private readonly ILocalizationManager _localizationManager; /// /// Initializes a new instance of the class. /// /// Instance of the interface. public OfficialRatingComparer(ILocalizationManager localizationManager) { _localizationManager = localizationManager; } /// /// Gets the name. /// /// The name. public ItemSortBy Type => ItemSortBy.OfficialRating; /// /// Compares the specified x. /// /// The x. /// The y. /// System.Int32. public int Compare(BaseItem? x, BaseItem? y) { ArgumentNullException.ThrowIfNull(x); ArgumentNullException.ThrowIfNull(y); var zeroRating = new ParentalRatingScore(0, 0); var ratingX = string.IsNullOrEmpty(x.OfficialRating) ? zeroRating : _localizationManager.GetRatingScore(x.OfficialRating) ?? zeroRating; var ratingY = string.IsNullOrEmpty(y.OfficialRating) ? zeroRating : _localizationManager.GetRatingScore(y.OfficialRating) ?? zeroRating; var scoreCompare = ratingX.Score.CompareTo(ratingY.Score); if (scoreCompare is 0) { return (ratingX.SubScore ?? 0).CompareTo(ratingY.SubScore ?? 0); } return scoreCompare; } }