using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class MusicAlbum /// public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo, IMetadataContainer { /// public IReadOnlyList AlbumArtists { get; set; } /// public IReadOnlyList Artists { get; set; } public MusicAlbum() { Artists = Array.Empty(); AlbumArtists = Array.Empty(); } [IgnoreDataMember] public override bool SupportsAddingToPlaylist => true; [IgnoreDataMember] public override bool SupportsInheritedParentImages => true; [IgnoreDataMember] public MusicArtist MusicArtist => GetMusicArtist(new DtoOptions(true)); public MusicArtist GetMusicArtist(DtoOptions options) { var parents = GetParents(); foreach (var parent in parents) { if (parent is MusicArtist artist) { return artist; } } var name = AlbumArtist; if (!string.IsNullOrEmpty(name)) { return LibraryManager.GetArtist(name, options); } return null; } [IgnoreDataMember] public override bool SupportsPlayedStatus => false; [IgnoreDataMember] public override bool SupportsCumulativeRunTimeTicks => true; [IgnoreDataMember] public string AlbumArtist => AlbumArtists.FirstOrDefault(); [IgnoreDataMember] public override bool SupportsPeople => false; /// /// Gets the tracks. /// /// The tracks. [IgnoreDataMember] public IEnumerable