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.BlockUnratedMusic;
}
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