diff options
Diffstat (limited to 'MediaBrowser.Providers/Music/LastfmAlbumProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/Music/LastfmAlbumProvider.cs | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs index f9d7d3018..e1fd05a50 100644 --- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs @@ -5,16 +5,18 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; +using MoreLinq; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.Music { - public class LastfmAlbumProvider : IRemoteMetadataProvider<MusicAlbum>, IHasOrder + public class LastfmAlbumProvider : IRemoteMetadataProvider<MusicAlbum, AlbumInfo>, IHasOrder { private readonly IJsonSerializer _json; private readonly IHttpClient _httpClient; @@ -30,27 +32,29 @@ namespace MediaBrowser.Providers.Music _logger = logger; } - public async Task<MetadataResult<MusicAlbum>> GetMetadata(ItemId id, CancellationToken cancellationToken) + public async Task<MetadataResult<MusicAlbum>> GetMetadata(AlbumInfo id, CancellationToken cancellationToken) { var result = new MetadataResult<MusicAlbum>(); - var lastFmData = await GetAlbumResult((AlbumId)id, cancellationToken).ConfigureAwait(false); + var lastFmData = await GetAlbumResult(id, cancellationToken).ConfigureAwait(false); if (lastFmData != null && lastFmData.album != null) { result.HasMetadata = true; + result.Item = new MusicAlbum(); ProcessAlbumData(result.Item, lastFmData.album); } return result; } - private async Task<LastfmGetAlbumResult> GetAlbumResult(AlbumId item, CancellationToken cancellationToken) + private async Task<LastfmGetAlbumResult> GetAlbumResult(AlbumInfo item, CancellationToken cancellationToken) { // Try album release Id - if (!string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Musicbrainz))) + var id = item.GetReleaseId(); + if (!string.IsNullOrEmpty(id)) { - var result = await GetAlbumResult(item.GetProviderId(MetadataProviders.Musicbrainz), cancellationToken).ConfigureAwait(false); + var result = await GetAlbumResult(id, cancellationToken).ConfigureAwait(false); if (result != null && result.album != null) { @@ -59,9 +63,10 @@ namespace MediaBrowser.Providers.Music } // Try album release group Id - if (!string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup))) + id = item.GetReleaseGroupId(); + if (!string.IsNullOrEmpty(id)) { - var result = await GetAlbumResult(item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup), cancellationToken).ConfigureAwait(false); + var result = await GetAlbumResult(id, cancellationToken).ConfigureAwait(false); if (result != null && result.album != null) { @@ -69,25 +74,26 @@ namespace MediaBrowser.Providers.Music } } - //// Get each song, distinct by the combination of AlbumArtist and Album - //var songs = item.RecursiveChildren.OfType<Audio>().DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList(); + var albumArtist = item.GetAlbumArtist(); + // Get each song, distinct by the combination of AlbumArtist and Album + var songs = item.SongInfos.DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList(); - //foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist))) - //{ - // var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false); + foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist))) + { + var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false); - // if (result != null && result.album != null) - // { - // return result; - // } - //} + if (result != null && result.album != null) + { + return result; + } + } - if (string.IsNullOrEmpty(item.AlbumArtist)) + if (string.IsNullOrEmpty(albumArtist)) { return null; } - return await GetAlbumResult(item.AlbumArtist, item.Name, cancellationToken); + return await GetAlbumResult(albumArtist, item.Name, cancellationToken); } private async Task<LastfmGetAlbumResult> GetAlbumResult(string artist, string album, CancellationToken cancellationToken) @@ -166,10 +172,13 @@ namespace MediaBrowser.Providers.Music string imageSize; var url = LastfmHelper.GetImageUrl(data, out imageSize); - var musicBrainzId = item.GetProviderId(MetadataProviders.Musicbrainz) ?? + var musicBrainzId = item.GetProviderId(MetadataProviders.MusicBrainzAlbum) ?? item.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); - LastfmHelper.SaveImageInfo(_config.ApplicationPaths, _logger, musicBrainzId, url, imageSize); + if (!string.IsNullOrEmpty(musicBrainzId) && !string.IsNullOrEmpty(url)) + { + LastfmHelper.SaveImageInfo(_config.ApplicationPaths, _logger, musicBrainzId, url, imageSize); + } } /// <summary> @@ -189,7 +198,11 @@ namespace MediaBrowser.Providers.Music public int Order { - get { return 1; } + get + { + // After fanart & audiodb + return 2; + } } } |
