diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index 3cb2b51fe1..7bfbbaf194 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -8,6 +8,8 @@ namespace MediaBrowser.Controller.Entities.Audio
///
public class MusicAlbum : Folder
{
+ public string LastFmImageUrl { get; set; }
+
///
/// Songs will group into us so don't also include us in the index
///
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index c49424f65e..ef86566701 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -77,7 +77,7 @@
-
+
diff --git a/MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs b/MediaBrowser.Providers/Music/LastFmImageProvider.cs
similarity index 87%
rename from MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs
rename to MediaBrowser.Providers/Music/LastFmImageProvider.cs
index b5fb160c3f..9ebad8b385 100644
--- a/MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs
+++ b/MediaBrowser.Providers/Music/LastFmImageProvider.cs
@@ -13,7 +13,7 @@ namespace MediaBrowser.Providers.Music
///
/// Class LastFmArtistImageProvider
///
- public class LastFmArtistImageProvider : BaseMetadataProvider
+ public class LastFmImageProvider : BaseMetadataProvider
{
///
/// The _provider manager
@@ -21,12 +21,12 @@ namespace MediaBrowser.Providers.Music
private readonly IProviderManager _providerManager;
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// The log manager.
/// The configuration manager.
/// The provider manager.
- public LastFmArtistImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager) :
+ public LastFmImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager) :
base(logManager, configurationManager)
{
_providerManager = providerManager;
@@ -39,7 +39,7 @@ namespace MediaBrowser.Providers.Music
/// true if XXXX, false otherwise
public override bool Supports(BaseItem item)
{
- return item is Artist || item is MusicArtist;
+ return item is Artist || item is MusicArtist || item is MusicAlbum;
}
///
@@ -114,6 +114,13 @@ namespace MediaBrowser.Providers.Music
return artistByName.LastFmImageUrl;
}
+ var album = item as MusicAlbum;
+
+ if (album != null)
+ {
+ return album.LastFmImageUrl;
+ }
+
return null;
}
}
diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
index 275b3c0aff..9ed1ee333c 100644
--- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Extensions;
+using System.IO;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
@@ -143,7 +144,15 @@ namespace MediaBrowser.Providers.Music
}).ConfigureAwait(false))
{
- return JsonSerializer.DeserializeFromStream(json);
+ using (var reader = new StreamReader(json))
+ {
+ var jsonText = await reader.ReadToEndAsync().ConfigureAwait(false);
+
+ // Fix their bad json
+ jsonText = jsonText.Replace("\"#text\"", "\"url\"");
+
+ return JsonSerializer.DeserializeFromString(jsonText);
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/LastfmBaseProvider.cs b/MediaBrowser.Providers/Music/LastfmBaseProvider.cs
index 36099509dd..82fc2e2412 100644
--- a/MediaBrowser.Providers/Music/LastfmBaseProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmBaseProvider.cs
@@ -193,7 +193,7 @@ namespace MediaBrowser.Providers.Music
public string size { get; set; }
}
- public class LastfmArtist
+ public class LastfmArtist : IHasLastFmImages
{
public string name { get; set; }
public string mbid { get; set; }
@@ -208,7 +208,7 @@ namespace MediaBrowser.Providers.Music
}
- public class LastfmAlbum
+ public class LastfmAlbum : IHasLastFmImages
{
public string name { get; set; }
public string artist { get; set; }
@@ -219,6 +219,12 @@ namespace MediaBrowser.Providers.Music
public int playcount { get; set; }
public LastfmTags toptags { get; set; }
public LastFmBio wiki { get; set; }
+ public List image { get; set; }
+ }
+
+ public interface IHasLastFmImages
+ {
+ List image { get; set; }
}
public class LastfmGetAlbumResult
diff --git a/MediaBrowser.Providers/Music/LastfmHelper.cs b/MediaBrowser.Providers/Music/LastfmHelper.cs
index a955ecbd57..f48874350e 100644
--- a/MediaBrowser.Providers/Music/LastfmHelper.cs
+++ b/MediaBrowser.Providers/Music/LastfmHelper.cs
@@ -47,14 +47,17 @@ namespace MediaBrowser.Providers.Music
}
}
- private static string GetImageUrl(LastfmArtist data)
+ private static string GetImageUrl(IHasLastFmImages data)
{
if (data.image == null)
{
return null;
}
- var img = data.image.FirstOrDefault(i => string.Equals(i.size, "extralarge", StringComparison.OrdinalIgnoreCase)) ??
+ var img = data.image
+ .Where(i => !string.IsNullOrWhiteSpace(i.url))
+ .FirstOrDefault(i => string.Equals(i.size, "mega", StringComparison.OrdinalIgnoreCase)) ??
+ data.image.FirstOrDefault(i => string.Equals(i.size, "extralarge", StringComparison.OrdinalIgnoreCase)) ??
data.image.FirstOrDefault(i => string.Equals(i.size, "large", StringComparison.OrdinalIgnoreCase)) ??
data.image.FirstOrDefault(i => string.Equals(i.size, "medium", StringComparison.OrdinalIgnoreCase)) ??
data.image.FirstOrDefault();
@@ -99,6 +102,9 @@ namespace MediaBrowser.Providers.Music
{
AddTags(item, data.toptags);
}
+
+ var album = (MusicAlbum)item;
+ album.LastFmImageUrl = GetImageUrl(data);
}
private static void AddTags(BaseItem item, LastfmTags tags)