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 string[] AlbumArtists { get; set; }
public string[] 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)
{
var artist = parent as MusicArtist;
if (artist != null)
{
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[] AllArtists
{
get
{
var list = new string[AlbumArtists.Length + Artists.Length];
var index = 0;
foreach (var artist in AlbumArtists)
{
list[index] = artist;
index++;
}
foreach (var artist in Artists)
{
list[index] = artist;
index++;
}
return list;
}
}
[IgnoreDataMember]
public string AlbumArtist => AlbumArtists.Length == 0 ? null : AlbumArtists[0];
[IgnoreDataMember]
public override bool SupportsPeople => false;
///
/// Gets the tracks.
///
/// The tracks.
[IgnoreDataMember]
public IEnumerable