using MediaBrowser.Common.Progress; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class MusicArtist /// public class MusicArtist : Folder, IMetadataContainer, IItemByName, IHasMusicGenres, IHasDualAccess, IHasTags, IHasProductionLocations, IHasLookupInfo { [IgnoreDataMember] public List UserItemCountList { get; set; } public bool IsAccessedByName { get; set; } /// /// Gets or sets the tags. /// /// The tags. public List Tags { get; set; } public List ProductionLocations { get; set; } public override bool IsFolder { get { return !IsAccessedByName; } } protected override IEnumerable ActualChildren { get { if (IsAccessedByName) { return new List(); } return base.ActualChildren; } } private readonly Task _cachedTask = Task.FromResult(true); protected override Task ValidateChildrenInternal(IProgress progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, DirectoryService directoryService) { if (IsAccessedByName) { // Should never get in here anyway return _cachedTask; } return base.ValidateChildrenInternal(progress, cancellationToken, recursive, refreshChildMetadata, refreshOptions, directoryService); } public MusicArtist() { UserItemCountList = new List(); Tags = new List(); ProductionLocations = new List(); } /// /// Gets the user data key. /// /// System.String. public override string GetUserDataKey() { return GetUserDataKey(this); } /// /// Returns the folder containing the item. /// If the item is a folder, it returns the folder itself /// /// The containing folder path. public override string ContainingFolderPath { get { return Path; } } /// /// Gets a value indicating whether this instance is owned item. /// /// true if this instance is owned item; otherwise, false. public override bool IsOwnedItem { get { return false; } } /// /// Gets the user data key. /// /// The item. /// System.String. private static string GetUserDataKey(MusicArtist item) { var id = item.GetProviderId(MetadataProviders.MusicBrainzArtist); if (!string.IsNullOrEmpty(id)) { return "Artist-Musicbrainz-" + id; } return "Artist-" + item.Name; } protected override bool GetBlockUnratedValue(UserConfiguration config) { return config.BlockUnratedMusic; } public async Task RefreshAllMetadata(MetadataRefreshOptions refreshOptions, IProgress progress, CancellationToken cancellationToken) { var items = RecursiveChildren.ToList(); var songs = items.OfType