using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class Audio /// public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo { public string FormatName { get; set; } public long? Size { get; set; } public string Container { get; set; } public Audio() { Artists = new List(); } /// /// Gets or sets a value indicating whether this instance has embedded image. /// /// true if this instance has embedded image; otherwise, false. public bool HasEmbeddedImage { get; set; } /// /// 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; } } /// /// 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 Parents.OfType().FirstOrDefault() ?? new MusicAlbum { Name = "" }; } } /// /// Gets or sets the artist. /// /// The artist. public List Artists { get; set; } [IgnoreDataMember] public List AllArtists { get { var list = new List(); if (!string.IsNullOrEmpty(AlbumArtist)) { list.Add(AlbumArtist); } list.AddRange(Artists); return list; } } /// /// Gets or sets the album. /// /// The album. public string Album { get; set; } /// /// Gets or sets the album artist. /// /// The album artist. public string AlbumArtist { get; set; } /// /// Gets the type of the media. /// /// The type of the media. public override string MediaType { get { return Model.Entities.MediaType.Audio; } } /// /// Creates the name of the sort. /// /// System.String. protected override string CreateSortName() { return (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("0000 - ") : "") + (IndexNumber != null ? IndexNumber.Value.ToString("0000 - ") : "") + Name; } /// /// Determines whether the specified name has artist. /// /// The name. /// true if the specified name has artist; otherwise, false. public bool HasArtist(string name) { return Artists.Contains(name, StringComparer.OrdinalIgnoreCase) || string.Equals(AlbumArtist, name, StringComparison.OrdinalIgnoreCase); } /// /// Gets the user data key. /// /// System.String. public override string GetUserDataKey() { var parent = FindParent(); if (parent != null) { var parentKey = parent.GetUserDataKey(); if (IndexNumber.HasValue) { var songKey = (ParentIndexNumber != null ? ParentIndexNumber.Value.ToString("0000 - ") : "") + (IndexNumber.Value.ToString("0000 - ")); return parentKey + songKey; } } return base.GetUserDataKey(); } protected override bool GetBlockUnratedValue(UserConfiguration config) { return config.BlockUnratedItems.Contains(UnratedItem.Music); } public SongInfo GetLookupInfo() { var info = GetItemLookupInfo(); info.AlbumArtist = AlbumArtist; info.Album = Album; info.Artists = Artists; return info; } } }