diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs
index 715bdd9da4..92e215fc70 100644
--- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs
+++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumProvider.cs
@@ -155,7 +155,6 @@ public class MusicBrainzAlbumProvider : IRemoteMetadataProvider
public async Task> GetMetadata(AlbumInfo info, CancellationToken cancellationToken)
{
- // TODO: This sets essentially nothing. As-is, it's mostly useless. Make it actually pull metadata and use it.
var query = MusicBrainz.Plugin.Instance!.MusicBrainzQuery;
var releaseId = info.GetReleaseId();
var releaseGroupId = info.GetReleaseGroupId();
@@ -169,13 +168,8 @@ public class MusicBrainzAlbumProvider : IRemoteMetadataProvider 0 ? releaseGroup.Releases[0] : null;
- if (release is not null)
- {
- releaseId = release.Id.ToString();
- result.HasMetadata = true;
- }
+ var releaseGroupLookup = await query.LookupReleaseGroupAsync(new Guid(releaseGroupId), Include.None, null, cancellationToken).ConfigureAwait(false);
+ releaseId = releaseGroupLookup.Releases?.Count > 0 ? releaseGroupLookup.Releases[0].Id.ToString() : null;
}
// If there is no release ID, lookup a release with the info we have
@@ -205,43 +199,117 @@ public class MusicBrainzAlbumProvider : IRemoteMetadataProvider 0)
+ {
+ item.AlbumArtists = artistCredit
+ .Select(credit => credit.Name)
+ .Where(name => !string.IsNullOrWhiteSpace(name))
+ .ToArray();
+ }
+
+ var genres = releaseGroup?.Genres ?? release?.Genres;
+ if (genres is not null && genres.Count > 0)
+ {
+ item.Genres = genres
+ .OrderByDescending(genre => genre.VoteCount)
+ .Select(genre => genre.Name)
+ .Where(name => !string.IsNullOrWhiteSpace(name))
+ .ToArray();
+ }
+
+ var tags = releaseGroup?.Tags ?? release?.Tags;
+ if (tags is not null && tags.Count > 0)
+ {
+ item.Tags = tags
+ .OrderByDescending(tag => tag.VoteCount)
+ .Select(tag => tag.Name)
+ .Where(name => !string.IsNullOrWhiteSpace(name))
+ .ToArray();
+ }
+
+ if (release?.LabelInfo is not null && release.LabelInfo.Count > 0)
+ {
+ item.Studios = release.LabelInfo
+ .Where(labelInfo => !string.IsNullOrWhiteSpace(labelInfo.Label?.Name))
+ .Select(labelInfo => labelInfo.Label!.Name!)
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToArray();
+ }
+ }
+
///
public Task GetImageResponse(string url, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs
index ea8984afb5..732a1ec242 100644
--- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs
+++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistProvider.cs
@@ -101,28 +101,72 @@ public class MusicBrainzArtistProvider : IRemoteMetadataProvider 0)
+ {
+ result.Item.Genres = artist.Genres
+ .OrderByDescending(genre => genre.VoteCount)
+ .Select(genre => genre.Name)
+ .Where(name => !string.IsNullOrWhiteSpace(name))
+ .ToArray();
+ }
+
+ if (artist.Tags is not null && artist.Tags.Count > 0)
+ {
+ result.Item.Tags = artist.Tags
+ .OrderByDescending(tag => tag.VoteCount)
+ .Select(tag => tag.Name)
+ .Where(name => !string.IsNullOrWhiteSpace(name))
+ .ToArray();
}
return result;