diff options
Diffstat (limited to 'MediaBrowser.Providers/Music/FanArtAlbumProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/Music/FanArtAlbumProvider.cs | 243 |
1 files changed, 48 insertions, 195 deletions
diff --git a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs index 6c4fa71e2..3c6485fcc 100644 --- a/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/FanArtAlbumProvider.cs @@ -18,6 +18,7 @@ using System.Threading; using System.Threading.Tasks; using System.Xml; using CommonIO; +using MediaBrowser.Model.Serialization; namespace MediaBrowser.Providers.Music { @@ -27,12 +28,14 @@ namespace MediaBrowser.Providers.Music private readonly IServerConfigurationManager _config; private readonly IHttpClient _httpClient; private readonly IFileSystem _fileSystem; + private readonly IJsonSerializer _jsonSerializer; - public FanartAlbumProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem) + public FanartAlbumProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem, IJsonSerializer jsonSerializer) { _config = config; _httpClient = httpClient; _fileSystem = fileSystem; + _jsonSerializer = jsonSerializer; } public string Name @@ -69,9 +72,9 @@ namespace MediaBrowser.Providers.Music if (!string.IsNullOrEmpty(artistMusicBrainzId)) { - await FanartArtistProvider.Current.EnsureArtistXml(artistMusicBrainzId, cancellationToken).ConfigureAwait(false); + await FanartArtistProvider.Current.EnsureArtistJson(artistMusicBrainzId, cancellationToken).ConfigureAwait(false); - var artistXmlPath = FanartArtistProvider.GetArtistXmlPath(_config.CommonApplicationPaths, artistMusicBrainzId); + var artistJsonPath = FanartArtistProvider.GetArtistJsonPath(_config.CommonApplicationPaths, artistMusicBrainzId); var musicBrainzReleaseGroupId = album.GetProviderId(MetadataProviders.MusicBrainzReleaseGroup); @@ -79,7 +82,7 @@ namespace MediaBrowser.Providers.Music try { - AddImages(list, artistXmlPath, musicBrainzId, musicBrainzReleaseGroupId, cancellationToken); + AddImages(list, artistJsonPath, musicBrainzId, musicBrainzReleaseGroupId, cancellationToken); } catch (FileNotFoundException) { @@ -124,217 +127,67 @@ namespace MediaBrowser.Providers.Music /// Adds the images. /// </summary> /// <param name="list">The list.</param> - /// <param name="xmlPath">The XML path.</param> + /// <param name="path">The path.</param> /// <param name="releaseId">The release identifier.</param> /// <param name="releaseGroupId">The release group identifier.</param> /// <param name="cancellationToken">The cancellation token.</param> - private void AddImages(List<RemoteImageInfo> list, string xmlPath, string releaseId, string releaseGroupId, CancellationToken cancellationToken) + private void AddImages(List<RemoteImageInfo> list, string path, string releaseId, string releaseGroupId, CancellationToken cancellationToken) { - using (var streamReader = new StreamReader(xmlPath, Encoding.UTF8)) - { - // Use XmlReader for best performance - using (var reader = XmlReader.Create(streamReader, new XmlReaderSettings - { - CheckCharacters = false, - IgnoreProcessingInstructions = true, - IgnoreComments = true, - ValidationType = ValidationType.None - })) - { - reader.MoveToContent(); - - // Loop through each element - while (reader.Read()) - { - cancellationToken.ThrowIfCancellationRequested(); + var obj = _jsonSerializer.DeserializeFromFile<FanartArtistProvider.FanartArtistResponse>(path); - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.Name) - { - case "music": - { - using (var subReader = reader.ReadSubtree()) - { - AddImagesFromMusicNode(list, releaseId, releaseGroupId, subReader, cancellationToken); - } - break; - } - - default: - reader.Skip(); - break; - } - } - } - } - } - } - - /// <summary> - /// Adds the images from music node. - /// </summary> - /// <param name="list">The list.</param> - /// <param name="releaseId">The release identifier.</param> - /// <param name="releaseGroupId">The release group identifier.</param> - /// <param name="reader">The reader.</param> - /// <param name="cancellationToken">The cancellation token.</param> - private void AddImagesFromMusicNode(List<RemoteImageInfo> list, string releaseId, string releaseGroupId, XmlReader reader, CancellationToken cancellationToken) - { - reader.MoveToContent(); - - while (reader.Read()) + if (obj.albums != null) { - if (reader.NodeType == XmlNodeType.Element) + var album = obj.albums.FirstOrDefault(i => string.Equals(i.release_group_id, releaseGroupId, StringComparison.OrdinalIgnoreCase)); + + if (album != null) { - switch (reader.Name) - { - case "albums": - { - using (var subReader = reader.ReadSubtree()) - { - AddImagesFromAlbumsNode(list, releaseId, releaseGroupId, subReader, cancellationToken); - } - break; - } - default: - { - using (reader.ReadSubtree()) - { - } - break; - } - } + PopulateImages(list, album.albumcover, ImageType.Primary, 1000, 1000); + PopulateImages(list, album.cdart, ImageType.Disc, 1000, 1000); } } } - /// <summary> - /// Adds the images from albums node. - /// </summary> - /// <param name="list">The list.</param> - /// <param name="releaseId">The release identifier.</param> - /// <param name="releaseGroupId">The release group identifier.</param> - /// <param name="reader">The reader.</param> - /// <param name="cancellationToken">The cancellation token.</param> - private void AddImagesFromAlbumsNode(List<RemoteImageInfo> list, string releaseId, string releaseGroupId, XmlReader reader, CancellationToken cancellationToken) + private void PopulateImages(List<RemoteImageInfo> list, + List<FanartArtistProvider.FanartArtistImage> images, + ImageType type, + int width, + int height) { - reader.MoveToContent(); - - while (reader.Read()) + if (images == null) { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.Name) - { - case "album": - { - var id = reader.GetAttribute("id"); - - using (var subReader = reader.ReadSubtree()) - { - if (string.Equals(id, releaseId, StringComparison.OrdinalIgnoreCase) || - string.Equals(id, releaseGroupId, StringComparison.OrdinalIgnoreCase)) - { - AddImages(list, subReader, cancellationToken); - } - } - break; - } - default: - { - using (reader.ReadSubtree()) - { - } - break; - } - } - } + return; } - } - - /// <summary> - /// Adds the images. - /// </summary> - /// <param name="list">The list.</param> - /// <param name="reader">The reader.</param> - /// <param name="cancellationToken">The cancellation token.</param> - private void AddImages(List<RemoteImageInfo> list, XmlReader reader, CancellationToken cancellationToken) - { - reader.MoveToContent(); - while (reader.Read()) + list.AddRange(images.Select(i => { - if (reader.NodeType == XmlNodeType.Element) + var url = i.url; + + if (!string.IsNullOrEmpty(url)) { - switch (reader.Name) + var likesString = i.likes; + int likes; + + var info = new RemoteImageInfo + { + RatingType = RatingType.Likes, + Type = type, + Width = width, + Height = height, + ProviderName = Name, + Url = url, + Language = i.lang + }; + + if (!string.IsNullOrEmpty(likesString) && int.TryParse(likesString, NumberStyles.Any, _usCulture, out likes)) { - case "cdart": - { - AddImage(list, reader, ImageType.Disc, 1000, 1000); - break; - } - case "albumcover": - { - AddImage(list, reader, ImageType.Primary, 1000, 1000); - break; - } - default: - { - using (reader.ReadSubtree()) - { - } - break; - } + info.CommunityRating = likes; } - } - } - } - - /// <summary> - /// Adds the image. - /// </summary> - /// <param name="list">The list.</param> - /// <param name="reader">The reader.</param> - /// <param name="type">The type.</param> - /// <param name="width">The width.</param> - /// <param name="height">The height.</param> - private void AddImage(List<RemoteImageInfo> list, XmlReader reader, ImageType type, int width, int height) - { - var url = reader.GetAttribute("url"); - var size = reader.GetAttribute("size"); - - if (!string.IsNullOrEmpty(size)) - { - int sizeNum; - if (int.TryParse(size, NumberStyles.Any, _usCulture, out sizeNum)) - { - width = sizeNum; - height = sizeNum; + return info; } - } - - var likesString = reader.GetAttribute("likes"); - int likes; - - var info = new RemoteImageInfo - { - RatingType = RatingType.Likes, - Type = type, - Width = width, - Height = height, - ProviderName = Name, - Url = url, - Language = reader.GetAttribute("lang") - }; - - if (!string.IsNullOrEmpty(likesString) && int.TryParse(likesString, NumberStyles.Any, _usCulture, out likes)) - { - info.CommunityRating = likes; - } - list.Add(info); + return null; + }).Where(i => i != null)); } public int Order @@ -374,9 +227,9 @@ namespace MediaBrowser.Providers.Music if (!String.IsNullOrEmpty(artistMusicBrainzId)) { // Process images - var artistXmlPath = FanartArtistProvider.GetArtistXmlPath(_config.CommonApplicationPaths, artistMusicBrainzId); + var artistJsonPath = FanartArtistProvider.GetArtistJsonPath(_config.CommonApplicationPaths, artistMusicBrainzId); - var fileInfo = _fileSystem.GetFileInfo(artistXmlPath); + var fileInfo = _fileSystem.GetFileInfo(artistJsonPath); return !fileInfo.Exists || _fileSystem.GetLastWriteTimeUtc(fileInfo) > date; } |
