#nullable disable #pragma warning disable CS1591 using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Jellyfin.Extensions.Json; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; using MediaBrowser.Model.Providers; namespace MediaBrowser.Providers.Plugins.AudioDb { public class AudioDbArtistImageProvider : IRemoteImageProvider, IHasOrder { private readonly IServerConfigurationManager _config; private readonly IHttpClientFactory _httpClientFactory; private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options; public AudioDbArtistImageProvider(IServerConfigurationManager config, IHttpClientFactory httpClientFactory) { _config = config; _httpClientFactory = httpClientFactory; } /// public string Name => "TheAudioDB"; /// // After fanart public int Order => 1; /// public IEnumerable GetSupportedImages(BaseItem item) { return new ImageType[] { ImageType.Primary, ImageType.Logo, ImageType.Banner, ImageType.Backdrop }; } /// public async Task> GetImages(BaseItem item, CancellationToken cancellationToken) { var id = item.GetProviderId(MetadataProvider.MusicBrainzArtist); if (!string.IsNullOrWhiteSpace(id)) { await AudioDbArtistProvider.Current.EnsureArtistInfo(id, cancellationToken).ConfigureAwait(false); var path = AudioDbArtistProvider.GetArtistInfoPath(_config.ApplicationPaths, id); FileStream jsonStream = AsyncFile.OpenRead(path); await using (jsonStream.ConfigureAwait(false)) { var obj = await JsonSerializer.DeserializeAsync(jsonStream, _jsonOptions, cancellationToken).ConfigureAwait(false); if (obj is not null && obj.artists is not null && obj.artists.Count > 0) { return GetImages(obj.artists[0]); } } } return Enumerable.Empty(); } private List GetImages(AudioDbArtistProvider.Artist item) { var list = new List(); if (!string.IsNullOrWhiteSpace(item.strArtistThumb)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistThumb, Type = ImageType.Primary }); } if (!string.IsNullOrWhiteSpace(item.strArtistLogo)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistLogo, Type = ImageType.Logo }); } if (!string.IsNullOrWhiteSpace(item.strArtistBanner)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistBanner, Type = ImageType.Banner }); } if (!string.IsNullOrWhiteSpace(item.strArtistFanart)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistFanart, Type = ImageType.Backdrop }); } if (!string.IsNullOrWhiteSpace(item.strArtistFanart2)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistFanart2, Type = ImageType.Backdrop }); } if (!string.IsNullOrWhiteSpace(item.strArtistFanart3)) { list.Add(new RemoteImageInfo { ProviderName = Name, Url = item.strArtistFanart3, Type = ImageType.Backdrop }); } return list; } public Task GetImageResponse(string url, CancellationToken cancellationToken) { var httpClient = _httpClientFactory.CreateClient(NamedClient.Default); return httpClient.GetAsync(url, cancellationToken); } /// public bool Supports(BaseItem item) => item is MusicArtist; } }