#nullable disable #pragma warning disable CA1002, CA1724, CA1826, CS1591 using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text.Json.Serialization; using Jellyfin.Data.Enums; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Dto; namespace MediaBrowser.Controller.Entities.Audio { /// /// Class Audio. /// public class Audio : BaseItem, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo, IHasMediaSources { public Audio() { Artists = Array.Empty(); AlbumArtists = Array.Empty(); } /// [JsonIgnore] public IReadOnlyList Artists { get; set; } /// [JsonIgnore] public IReadOnlyList AlbumArtists { get; set; } [JsonIgnore] public override bool SupportsPlayedStatus => true; [JsonIgnore] public override bool SupportsPeople => true; [JsonIgnore] public override bool SupportsAddingToPlaylist => true; [JsonIgnore] public override bool SupportsInheritedParentImages => true; [JsonIgnore] protected override bool SupportsOwnedItems => false; [JsonIgnore] public override Folder LatestItemsIndexContainer => AlbumEntity; [JsonIgnore] public MusicAlbum AlbumEntity => FindParent(); /// /// Gets the type of the media. /// /// The type of the media. [JsonIgnore] public override MediaType MediaType => MediaType.Audio; public override double GetDefaultPrimaryImageAspectRatio() { return 1; } public override bool CanDownload() { return IsFileProtocol; } /// /// Creates the name of the sort. /// /// System.String. protected override string CreateSortName() { return (ParentIndexNumber is not null ? ParentIndexNumber.Value.ToString("0000 - ", CultureInfo.InvariantCulture) : string.Empty) + (IndexNumber is not null ? IndexNumber.Value.ToString("0000 - ", CultureInfo.InvariantCulture) : string.Empty) + Name; } public override List GetUserDataKeys() { var list = base.GetUserDataKeys(); var songKey = IndexNumber.HasValue ? IndexNumber.Value.ToString("0000", CultureInfo.InvariantCulture) : string.Empty; if (ParentIndexNumber.HasValue) { songKey = ParentIndexNumber.Value.ToString("0000", CultureInfo.InvariantCulture) + "-" + songKey; } songKey += Name; if (!string.IsNullOrEmpty(Album)) { songKey = Album + "-" + songKey; } var albumArtist = AlbumArtists.FirstOrDefault(); if (!string.IsNullOrEmpty(albumArtist)) { songKey = albumArtist + "-" + songKey; } list.Insert(0, songKey); return list; } public override UnratedItem GetBlockUnratedType() { if (SourceType == SourceType.Library) { return UnratedItem.Music; } return base.GetBlockUnratedType(); } public SongInfo GetLookupInfo() { var info = GetItemLookupInfo(); info.AlbumArtists = AlbumArtists; info.Album = Album; info.Artists = Artists; return info; } protected override IEnumerable<(BaseItem Item, MediaSourceType MediaSourceType)> GetAllItemsForMediaSources() => new[] { ((BaseItem)this, MediaSourceType.Default) }; } }