From b3595eab6a94fda4f81f637007b2ac79e8a85065 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 8 Oct 2016 14:51:07 -0400 Subject: [PATCH] update music brainz to fetch overview --- .../Configuration/ServerConfiguration.cs | 6 +- MediaBrowser.Model/Dto/BaseItemDto.cs | 2 + .../Providers/RemoteSearchResult.cs | 3 +- .../Music/MusicBrainzAlbumProvider.cs | 60 +++++++++++++++---- .../Music/MusicBrainzArtistProvider.cs | 11 +++- .../Dto/DtoService.cs | 6 ++ .../Persistence/SqliteItemRepository.cs | 10 +++- 7 files changed, 78 insertions(+), 20 deletions(-) diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 2cdd88775f..a1e5637a49 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -435,7 +435,8 @@ namespace MediaBrowser.Model.Configuration Limit = 0, Type = ImageType.Disc } - } + }, + DisabledMetadataFetchers = new []{ "TheAudioDB" } }, new MetadataOptions(1, 1280) @@ -473,7 +474,8 @@ namespace MediaBrowser.Model.Configuration Limit = 0, Type = ImageType.Logo } - } + }, + DisabledMetadataFetchers = new []{ "TheAudioDB" } }, new MetadataOptions(1, 1280) diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs index 7d21f9861e..598f8c58b4 100644 --- a/MediaBrowser.Model/Dto/BaseItemDto.cs +++ b/MediaBrowser.Model/Dto/BaseItemDto.cs @@ -169,6 +169,8 @@ namespace MediaBrowser.Model.Dto /// The game system. public string GameSystem { get; set; } + public string[] ProductionLocations { get; set; } + /// /// Gets or sets the critic rating summary. /// diff --git a/MediaBrowser.Model/Providers/RemoteSearchResult.cs b/MediaBrowser.Model/Providers/RemoteSearchResult.cs index 8c9e116d60..72b6632e4c 100644 --- a/MediaBrowser.Model/Providers/RemoteSearchResult.cs +++ b/MediaBrowser.Model/Providers/RemoteSearchResult.cs @@ -32,7 +32,8 @@ namespace MediaBrowser.Model.Providers public string SearchProviderName { get; set; } public string GameSystem { get; set; } - + public string Overview { get; set; } + public RemoteSearchResult() { ProviderIds = new Dictionary(StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs index a0ce806105..9ed8f0a007 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs @@ -85,7 +85,8 @@ namespace MediaBrowser.Providers.Music { var result = new RemoteSearchResult { - Name = i.Title + Name = i.Title, + ProductionYear = i.Year }; if (!string.IsNullOrWhiteSpace(i.ReleaseId)) @@ -94,7 +95,7 @@ namespace MediaBrowser.Providers.Music } if (!string.IsNullOrWhiteSpace(i.ReleaseGroupId)) { - result.SetProviderId(MetadataProviders.MusicBrainzAlbum, i.ReleaseGroupId); + result.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, i.ReleaseGroupId); } return result; @@ -117,16 +118,22 @@ namespace MediaBrowser.Providers.Music var releaseResult = await GetReleaseResult(artistMusicBrainzId, id.GetAlbumArtist(), id.Name, cancellationToken).ConfigureAwait(false); - if (!string.IsNullOrEmpty(releaseResult.ReleaseId)) + if (releaseResult != null) { - releaseId = releaseResult.ReleaseId; - result.HasMetadata = true; - } + if (!string.IsNullOrEmpty(releaseResult.ReleaseId)) + { + releaseId = releaseResult.ReleaseId; + result.HasMetadata = true; + } - if (!string.IsNullOrEmpty(releaseResult.ReleaseGroupId)) - { - releaseGroupId = releaseResult.ReleaseGroupId; - result.HasMetadata = true; + if (!string.IsNullOrEmpty(releaseResult.ReleaseGroupId)) + { + releaseGroupId = releaseResult.ReleaseGroupId; + result.HasMetadata = true; + } + + result.Item.ProductionYear = releaseResult.Year; + result.Item.Overview = releaseResult.Overview; } } @@ -205,6 +212,8 @@ namespace MediaBrowser.Providers.Music public string ReleaseId; public string ReleaseGroupId; public string Title; + public string Overview; + public int? Year; public static List Parse(XmlDocument doc, int? limit = null) { @@ -237,7 +246,9 @@ namespace MediaBrowser.Providers.Music { ReleaseId = releaseId, ReleaseGroupId = releaseGroupId, - Title = GetTitleFromReleaseNode(node) + Title = GetValueFromReleaseNode(node, "title"), + Overview = GetValueFromReleaseNode(node, "annotation"), + Year = GetYearFromReleaseNode(node, "date") }); if (limit.HasValue && list.Count >= limit.Value) @@ -251,14 +262,37 @@ namespace MediaBrowser.Providers.Music return list; } - private static string GetTitleFromReleaseNode(XmlNode node) + private static int? GetYearFromReleaseNode(XmlNode node, string name) { var subNodes = node.ChildNodes; if (subNodes != null) { foreach (var subNode in subNodes.Cast()) { - if (string.Equals(subNode.Name, "title", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(subNode.Name, name, StringComparison.OrdinalIgnoreCase)) + { + DateTime date; + if (DateTime.TryParse(subNode.InnerText, out date)) + { + return date.Year; + } + + return null; + } + } + } + + return null; + } + + private static string GetValueFromReleaseNode(XmlNode node, string name) + { + var subNodes = node.ChildNodes; + if (subNodes != null) + { + foreach (var subNode in subNodes.Cast()) + { + if (string.Equals(subNode.Name, name, StringComparison.OrdinalIgnoreCase)) { return subNode.InnerText; } diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs index 88635bf06c..88128bdc7a 100644 --- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs +++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs @@ -86,7 +86,7 @@ namespace MediaBrowser.Providers.Music if (node.Attributes != null) { string name = null; - + string overview = null; string mbzId = node.Attributes["id"].Value; foreach (var child in node.ChildNodes.Cast()) @@ -94,7 +94,10 @@ namespace MediaBrowser.Providers.Music if (string.Equals(child.Name, "name", StringComparison.OrdinalIgnoreCase)) { name = child.InnerText; - break; + } + if (string.Equals(child.Name, "annotation", StringComparison.OrdinalIgnoreCase)) + { + overview = child.InnerText; } } @@ -102,7 +105,8 @@ namespace MediaBrowser.Providers.Music { var result = new RemoteSearchResult { - Name = name + Name = name, + Overview = overview }; result.SetProviderId(MetadataProviders.MusicBrainzArtist, mbzId); @@ -135,6 +139,7 @@ namespace MediaBrowser.Providers.Music { musicBrainzId = singleResult.GetProviderId(MetadataProviders.MusicBrainzArtist); //result.Item.Name = singleResult.Name; + result.Item.Overview = singleResult.Overview; } } diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs index ae204c892a..47c1d83320 100644 --- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs +++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs @@ -1432,6 +1432,12 @@ namespace MediaBrowser.Server.Implementations.Dto SetBookProperties(dto, book); } + var movie = item as Movie; + if (movie != null) + { + dto.ProductionLocations = new string[] { }; + } + var photo = item as Photo; if (photo != null) { diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 8275b01b00..77e2c36e20 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -742,7 +742,15 @@ namespace MediaBrowser.Server.Implementations.Persistence _saveItemCommand.GetParameter(index++).Value = item.Id; _saveItemCommand.GetParameter(index++).Value = item.GetType().FullName; - _saveItemCommand.GetParameter(index++).Value = _jsonSerializer.SerializeToBytes(item, _memoryStreamProvider); + + if (TypeRequiresDeserialization(item.GetType())) + { + _saveItemCommand.GetParameter(index++).Value = _jsonSerializer.SerializeToBytes(item, _memoryStreamProvider); + } + else + { + _saveItemCommand.GetParameter(index++).Value = null; + } _saveItemCommand.GetParameter(index++).Value = item.Path;