aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Music/LastfmAlbumProvider.cs')
-rw-r--r--MediaBrowser.Providers/Music/LastfmAlbumProvider.cs59
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;
+ }
}
}