diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 0071018681..09ff84044d 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -778,7 +778,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers case "thumb": { - FetchThumbNode(reader, itemResult); + FetchThumbNode(reader, itemResult, "thumb"); break; } @@ -796,7 +796,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers break; } - FetchThumbNode(subtree, itemResult); + FetchThumbNode(subtree, itemResult, "fanart"); break; } @@ -819,17 +819,22 @@ namespace MediaBrowser.XbmcMetadata.Parsers } } - private void FetchThumbNode(XmlReader reader, MetadataResult itemResult) + private void FetchThumbNode(XmlReader reader, MetadataResult itemResult, string parentNode) { var artType = reader.GetAttribute("aspect"); var val = reader.ReadElementContentAsString(); // artType is null if the thumb node is a child of the fanart tag // -> set image type to fanart - if (string.IsNullOrWhiteSpace(artType)) + if (string.IsNullOrWhiteSpace(artType) && parentNode.Equals("fanart", StringComparison.Ordinal)) { artType = "fanart"; } + else if (string.IsNullOrWhiteSpace(artType)) + { + // Sonarr writes thumb tags for posters without aspect property + artType = "poster"; + } // skip: // - empty uri diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/EpisodeNfoProviderTests.cs b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/EpisodeNfoProviderTests.cs index 3e726f23d9..4f4ae5afb9 100644 --- a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/EpisodeNfoProviderTests.cs +++ b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/EpisodeNfoProviderTests.cs @@ -122,6 +122,20 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers Assert.Equal(2004, item.ProductionYear); } + [Fact] + public void Parse_GivenFileWithThumbWithoutAspect_Success() + { + var result = new MetadataResult + { + Item = new Episode() + }; + + _parser.Fetch(result, "Test Data/Sonarr-Thumb.nfo", CancellationToken.None); + + Assert.Single(result.RemoteImages.Where(x => x.Type == ImageType.Primary)); + Assert.Equal("https://artworks.thetvdb.com/banners/episodes/359095/7081317.jpg", result.RemoteImages.First(x => x.Type == ImageType.Primary).Url); + } + [Fact] public void Fetch_WithNullItem_ThrowsArgumentException() { diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Sonarr-Thumb.nfo b/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Sonarr-Thumb.nfo new file mode 100644 index 0000000000..fb86768ef8 --- /dev/null +++ b/tests/Jellyfin.XbmcMetadata.Tests/Test Data/Sonarr-Thumb.nfo @@ -0,0 +1,34 @@ + + Sometimes a Genius's Every Action Is at the Mercy of X + 1 + 8 + 2019-05-26 + After Nariyuki wins a smartphone in a lottery, he can't wait to use it for apps like the dictionary, schedule managing, and the like. He also learns that studying in the bathtub is effective and quickly puts the method into practice. + 4289 + https://artworks.thetvdb.com/banners/episodes/359095/7081317.jpg + false + + + + + + English + + + +