using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class MusicAlbum /// public class MusicAlbum : Folder { /// /// 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; } } /// /// 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; } } /// /// Override to point to first child (song) /// /// The production year. public override int? ProductionYear { get { var child = Children.FirstOrDefault(); return child == null ? base.ProductionYear : child.ProductionYear; } set { base.ProductionYear = value; } } /// /// Override to point to first child (song) /// /// The genres. public override List Genres { get { var child = Children.FirstOrDefault(); return child == null ? base.Genres : child.Genres; } set { base.Genres = value; } } /// /// Override to point to first child (song) /// /// The studios. public override List Studios { get { var child = Children.FirstOrDefault(); return child == null ? base.Studios : child.Studios; } set { base.Studios = value; } } /// /// Gets or sets the images. /// /// The images. public override Dictionary Images { get { var images = base.Images; string primaryImagePath; if (images == null || !images.TryGetValue(ImageType.Primary, out primaryImagePath)) { var image = Children.Select(c => c.PrimaryImagePath).FirstOrDefault(c => !string.IsNullOrEmpty(c)); if (!string.IsNullOrEmpty(image)) { if (images == null) { images = new Dictionary(); } images[ImageType.Primary] = image; } } return images; } set { base.Images = value; } } /// /// Determines whether the specified artist has artist. /// /// The artist. /// true if the specified artist has artist; otherwise, false. public bool HasArtist(string artist) { return RecursiveChildren.OfType