using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class MusicAlbum /// public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasTags, IHasLookupInfo, IHasSeries { public List SoundtrackIds { get; set; } public MusicAlbum() { Artists = new List(); SoundtrackIds = new List(); Tags = new List(); } [IgnoreDataMember] public MusicArtist MusicArtist { get { return Parents.OfType().FirstOrDefault(); } } /// /// Gets or sets the tags. /// /// The tags. public List Tags { get; set; } /// /// Songs will group into us so don't also include us in the index /// /// true if [include in index]; otherwise, false. [IgnoreDataMember] public override bool IncludeInIndex { get { return false; } } [IgnoreDataMember] public string SeriesName { get { return AlbumArtist; } } /// /// Override this to true if class should be grouped under a container in indicies /// The container class should be defined via IndexContainer /// /// true if [group in index]; otherwise, false. [IgnoreDataMember] public override bool GroupInIndex { get { return true; } } /// /// The unknwon artist /// private static readonly MusicArtist UnknwonArtist = new MusicArtist { Name = "" }; /// /// Override this to return the folder that should be used to construct a container /// for this item in an index. GroupInIndex should be true as well. /// /// The index container. [IgnoreDataMember] public override Folder IndexContainer { get { return Parent as MusicArtist ?? UnknwonArtist; } } /// /// Determines whether the specified artist has artist. /// /// The artist. /// true if the specified artist has artist; otherwise, false. public bool HasArtist(string artist) { return string.Equals(AlbumArtist, artist, StringComparison.OrdinalIgnoreCase) || Artists.Contains(artist, StringComparer.OrdinalIgnoreCase); } public string AlbumArtist { get; set; } public List Artists { get; set; } /// /// Gets the user data key. /// /// System.String. public override string GetUserDataKey() { var id = this.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); if (!string.IsNullOrEmpty(id)) { return "MusicAlbum-MusicBrainzReleaseGroup-" + id; } id = this.GetProviderId(MetadataProviders.MusicBrainzAlbum); if (!string.IsNullOrEmpty(id)) { return "MusicAlbum-Musicbrainz-" + id; } return base.GetUserDataKey(); } protected override bool GetBlockUnratedValue(UserConfiguration config) { return config.BlockUnratedItems.Contains(UnratedItem.Music); } public AlbumInfo GetLookupInfo() { var id = GetItemLookupInfo(); id.AlbumArtist = AlbumArtist; var artist = Parents.OfType().FirstOrDefault(); if (artist != null) { id.ArtistProviderIds = artist.ProviderIds; } id.SongInfos = RecursiveChildren.OfType