@ -1,5 +1,4 @@
using System ;
using System.Linq ;
using Jellyfin.Data.Enums ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Entities.Audio ;
@ -9,37 +8,35 @@ using MediaBrowser.Model.Querying;
namespace Emby.Server.Implementations.Sorting
{
/// <summary>
/// Class AlbumArtistComparer .
/// Allows comparing artists of albums. Only the first artist of each album is considered .
/// </summary>
public class AlbumArtistComparer : IBaseItemComparer
{
/// <summary>
/// Gets the name .
/// Gets the item type this comparer compares .
/// </summary>
/// <value>The name.</value>
public ItemSortBy Type = > ItemSortBy . AlbumArtist ;
/// <summary>
/// Compares the specified x .
/// Compares the specified arguments on their primary artist .
/// </summary>
/// <param name="x"> The x .</param>
/// <param name="y"> The y .</param>
/// <returns> System.Int32 .</returns>
/// <param name="x"> First item to compare .</param>
/// <param name="y"> Second item to compare .</param>
/// <returns> Zero if equal, else negative or positive number to indicate order .</returns>
public int Compare ( BaseItem ? x , BaseItem ? y )
{
return string . Compare ( Get Value( x ) , GetValue ( y ) , StringComparison . OrdinalIgnoreCase ) ;
return string . Compare ( Get FirstAlbumArtist( x ) , GetFirstAlbumArtist ( y ) , StringComparison . OrdinalIgnoreCase ) ;
}
/// <summary>
/// Gets the value.
/// </summary>
/// <param name="x">The x.</param>
/// <returns>System.String.</returns>
private static string? GetValue ( BaseItem ? x )
private static string? GetFirstAlbumArtist ( BaseItem ? x )
{
var audio = x as IHasAlbumArtist ;
if ( x is IHasAlbumArtist audio
& & audio . AlbumArtists . Count ! = 0 )
{
return audio . AlbumArtists [ 0 ] ;
}
return audio ? . AlbumArtists . FirstOrDefault ( ) ;
return null ;
}
}
}