diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-10-28 23:54:07 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-10-28 23:54:07 -0400 |
| commit | 84c96a9cc432ee939ec361bb85e561a8b3b39069 (patch) | |
| tree | ad3b71649bfdecd605589b55595bc5f7bcbbd4a2 /MediaBrowser.Providers | |
| parent | 5302cd5b20e8c160d288886732b410124091878f (diff) | |
| parent | 1dcb3a1369c41f292b1cb0f9ac32b100f30c2485 (diff) | |
Merge pull request #2986 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Providers')
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs | 163 |
2 files changed, 165 insertions, 1 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index 9dd5052dae..cdef42771a 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -948,7 +948,8 @@ namespace MediaBrowser.Providers.Manager } else { - throw new Exception(string.Format("Refresh for item {0} {1} is not in progress", item.GetType().Name, item.Id.ToString("N"))); + // TODO: Need to hunt down the conditions for this happening + //throw new Exception(string.Format("Refresh for item {0} {1} is not in progress", item.GetType().Name, item.Id.ToString("N"))); } } } diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index b54d14935e..3befca4289 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -117,6 +117,17 @@ namespace MediaBrowser.Providers.Music ProductionYear = i.Year }; + if (i.Artists.Count > 0) + { + result.AlbumArtist = new RemoteSearchResult + { + SearchProviderName = Name, + Name = i.Artists[0].Item1 + }; + + result.AlbumArtist.SetProviderId(MetadataProviders.MusicBrainzArtist, i.Artists[0].Item2); + } + if (!string.IsNullOrWhiteSpace(i.ReleaseId)) { result.SetProviderId(MetadataProviders.MusicBrainzAlbum, i.ReleaseId); @@ -285,6 +296,8 @@ namespace MediaBrowser.Providers.Music public string Overview; public int? Year; + public List<Tuple<string, string>> Artists = new List<Tuple<string, string>>(); + public static List<ReleaseResult> Parse(XmlReader reader) { reader.MoveToContent(); @@ -419,6 +432,32 @@ namespace MediaBrowser.Providers.Music reader.Skip(); break; } + case "artist-credit": + { + // TODO + + /* + * <artist-credit> +<name-credit> +<artist id="e225cda5-882d-4b80-b8a3-b36d7175b1ea"> +<name>SARCASTIC+ZOOKEEPER</name> +<sort-name>SARCASTIC+ZOOKEEPER</sort-name> +</artist> +</name-credit> +</artist-credit> + */ + using (var subReader = reader.ReadSubtree()) + { + var artist = ParseArtistCredit(subReader); + + if (artist != null) + { + result.Artists.Add(artist); + } + } + + break; + } default: { reader.Skip(); @@ -436,6 +475,130 @@ namespace MediaBrowser.Providers.Music } } + private static Tuple<string, string> ParseArtistCredit(XmlReader reader) + { + reader.MoveToContent(); + reader.Read(); + + // http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator + + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "name-credit": + { + using (var subReader = reader.ReadSubtree()) + { + return ParseArtistNameCredit(subReader); + } + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + return null; + } + + private static Tuple<string, string> ParseArtistNameCredit(XmlReader reader) + { + reader.MoveToContent(); + reader.Read(); + + string name = null; + + // http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator + + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "artist": + { + var id = reader.GetAttribute("id"); + using (var subReader = reader.ReadSubtree()) + { + return ParseArtistArtistCredit(subReader, id); + } + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + if (string.IsNullOrWhiteSpace(name)) + { + return null; + } + + return new Tuple<string, string>(name, null); + } + + private static Tuple<string, string> ParseArtistArtistCredit(XmlReader reader, string artistId) + { + reader.MoveToContent(); + reader.Read(); + + string name = null; + + // http://stackoverflow.com/questions/2299632/why-does-xmlreader-skip-every-other-element-if-there-is-no-whitespace-separator + + // Loop through each element + while (!reader.EOF && reader.ReadState == ReadState.Interactive) + { + if (reader.NodeType == XmlNodeType.Element) + { + switch (reader.Name) + { + case "name": + { + name = reader.ReadElementContentAsString(); + break; + } + default: + { + reader.Skip(); + break; + } + } + } + else + { + reader.Read(); + } + } + + if (string.IsNullOrWhiteSpace(name)) + { + return null; + } + + return new Tuple<string, string>(name, artistId); + } + private async Task<string> GetReleaseIdFromReleaseGroupId(string releaseGroupId, CancellationToken cancellationToken) { var url = string.Format("/ws/2/release?release-group={0}", releaseGroupId); |
