diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-06 11:38:22 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-06 11:38:22 -0400 |
| commit | 062d2dc29f9387ba437e92bf797793adc6f71e21 (patch) | |
| tree | 3ba0d6021dad55f1450dbe6a00c8c93429c018c8 | |
| parent | 4039c0f70483bbd4294e07126716c626747d86d4 (diff) | |
fixes #522 - Use last fm as a secondary provider for album images
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Providers/MediaBrowser.Providers.csproj | 2 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/LastFmImageProvider.cs (renamed from MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs) | 15 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/LastfmAlbumProvider.cs | 13 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/LastfmBaseProvider.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/LastfmHelper.cs | 10 |
6 files changed, 41 insertions, 11 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs index 3cb2b51fe..7bfbbaf19 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs @@ -8,6 +8,8 @@ namespace MediaBrowser.Controller.Entities.Audio /// </summary> public class MusicAlbum : Folder { + public string LastFmImageUrl { get; set; } + /// <summary> /// Songs will group into us so don't also include us in the index /// </summary> diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index c49424f65..ef8656670 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -77,7 +77,7 @@ <Compile Include="Music\FanArtUpdatesPrescanTask.cs" /> <Compile Include="Music\LastfmAlbumProvider.cs" /> <Compile Include="Music\LastfmArtistByNameProvider.cs" /> - <Compile Include="Music\LastFmArtistImageProvider.cs" /> + <Compile Include="Music\LastFmImageProvider.cs" /> <Compile Include="Music\LastfmArtistProvider.cs" /> <Compile Include="Music\LastfmBaseProvider.cs" /> <Compile Include="Music\LastfmHelper.cs" /> diff --git a/MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs b/MediaBrowser.Providers/Music/LastFmImageProvider.cs index b5fb160c3..9ebad8b38 100644 --- a/MediaBrowser.Providers/Music/LastFmArtistImageProvider.cs +++ b/MediaBrowser.Providers/Music/LastFmImageProvider.cs @@ -13,7 +13,7 @@ namespace MediaBrowser.Providers.Music /// <summary> /// Class LastFmArtistImageProvider /// </summary> - public class LastFmArtistImageProvider : BaseMetadataProvider + public class LastFmImageProvider : BaseMetadataProvider { /// <summary> /// The _provider manager @@ -21,12 +21,12 @@ namespace MediaBrowser.Providers.Music private readonly IProviderManager _providerManager; /// <summary> - /// Initializes a new instance of the <see cref="LastFmArtistImageProvider"/> class. + /// Initializes a new instance of the <see cref="LastFmImageProvider"/> class. /// </summary> /// <param name="logManager">The log manager.</param> /// <param name="configurationManager">The configuration manager.</param> /// <param name="providerManager">The provider manager.</param> - 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 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> public override bool Supports(BaseItem item) { - return item is Artist || item is MusicArtist; + return item is Artist || item is MusicArtist || item is MusicAlbum; } /// <summary> @@ -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 275b3c0af..9ed1ee333 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<LastfmGetAlbumResult>(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<LastfmGetAlbumResult>(jsonText); + } } } diff --git a/MediaBrowser.Providers/Music/LastfmBaseProvider.cs b/MediaBrowser.Providers/Music/LastfmBaseProvider.cs index 36099509d..82fc2e241 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<LastFmImage> image { get; set; } + } + + public interface IHasLastFmImages + { + List<LastFmImage> image { get; set; } } public class LastfmGetAlbumResult diff --git a/MediaBrowser.Providers/Music/LastfmHelper.cs b/MediaBrowser.Providers/Music/LastfmHelper.cs index a955ecbd5..f48874350 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) |
