aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs')
-rw-r--r--MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs53
1 files changed, 52 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs
index a3fad6e8a7..0cdd9b19b7 100644
--- a/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs
+++ b/MediaBrowser.Controller/Providers/Music/LastfmAlbumProvider.cs
@@ -1,7 +1,9 @@
-using MediaBrowser.Common.Net;
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
using MoreLinq;
@@ -32,6 +34,24 @@ namespace MediaBrowser.Controller.Providers.Music
return BlankId;
}
+ /// <summary>
+ /// Needses the refresh internal.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="providerInfo">The provider info.</param>
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
+ protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
+ {
+ // If song metadata has changed and we don't have an mbid, refresh
+ if (string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Musicbrainz)) &&
+ GetComparisonData(item as MusicAlbum) != providerInfo.Data)
+ {
+ return true;
+ }
+
+ return base.NeedsRefreshInternal(item, providerInfo);
+ }
+
protected override async Task FetchLastfmData(BaseItem item, string id, CancellationToken cancellationToken)
{
var result = await GetAlbumResult(item, cancellationToken).ConfigureAwait(false);
@@ -51,6 +71,13 @@ namespace MediaBrowser.Controller.Providers.Music
}
}
+
+ BaseProviderInfo data;
+
+ if (item.ProviderData.TryGetValue(Id, out data))
+ {
+ data.Data = GetComparisonData(item as MusicAlbum);
+ }
}
private async Task<LastfmGetAlbumResult> GetAlbumResult(BaseItem item, CancellationToken cancellationToken)
@@ -102,5 +129,29 @@ namespace MediaBrowser.Controller.Providers.Music
return true;
}
}
+
+ /// <summary>
+ /// Gets the data.
+ /// </summary>
+ /// <param name="album">The album.</param>
+ /// <returns>Guid.</returns>
+ private Guid GetComparisonData(MusicAlbum album)
+ {
+ var songs = album.RecursiveChildren.OfType<Audio>().ToList();
+
+ var albumArtists = songs.Select(i => i.AlbumArtist)
+ .Where(i => !string.IsNullOrEmpty(i))
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToList();
+
+ var albumNames = songs.Select(i => i.AlbumArtist)
+ .Where(i => !string.IsNullOrEmpty(i))
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToList();
+
+ albumArtists.AddRange(albumNames);
+
+ return string.Join(string.Empty, albumArtists.OrderBy(i => i).ToArray()).GetMD5();
+ }
}
}