diff options
Diffstat (limited to 'MediaBrowser.XbmcMetadata/Parsers')
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs | 38 | ||||
| -rw-r--r-- | MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs | 15 |
2 files changed, 26 insertions, 27 deletions
diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs index 2d65188b6..137abff47 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs @@ -50,23 +50,20 @@ namespace MediaBrowser.XbmcMetadata.Parsers { case "id": { - // get ids from attributes + // Get ids from attributes + item.TrySetProviderId(MetadataProvider.Tmdb, reader.GetAttribute("TMDB")); + item.TrySetProviderId(MetadataProvider.Tvdb, reader.GetAttribute("TVDB")); string? imdbId = reader.GetAttribute("IMDB"); - string? tmdbId = reader.GetAttribute("TMDB"); - // read id from content + // Read id from content + // Content can be arbitrary according to Kodi wiki, so only parse if we are sure it matches a provider-specific schema var contentId = reader.ReadElementContentAsString(); - if (contentId.Contains("tt", StringComparison.Ordinal) && string.IsNullOrEmpty(imdbId)) + if (string.IsNullOrEmpty(imdbId) && contentId.StartsWith("tt", StringComparison.Ordinal)) { imdbId = contentId; } - else if (string.IsNullOrEmpty(tmdbId)) - { - tmdbId = contentId; - } item.TrySetProviderId(MetadataProvider.Imdb, imdbId); - item.TrySetProviderId(MetadataProvider.Tmdb, tmdbId); break; } @@ -82,21 +79,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers if (!string.IsNullOrWhiteSpace(val) && movie is not null) { - // TODO Handle this better later - if (!val.Contains('<', StringComparison.Ordinal)) + try { - movie.CollectionName = val; + ParseSetXml(val, movie); } - else + catch (Exception ex) { - try - { - ParseSetXml(val, movie); - } - catch (Exception ex) - { - Logger.LogError(ex, "Error parsing set node"); - } + Logger.LogError(ex, "Error parsing set node"); } } @@ -139,7 +128,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers // Loop through each element while (!reader.EOF && reader.ReadState == ReadState.Interactive) { - if (reader.NodeType == XmlNodeType.Element) + if (reader.NodeType == XmlNodeType.Text && reader.Depth == 1) + { + movie.CollectionName = reader.Value; + break; + } + else if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs index 59abef919..b0944515b 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs @@ -1,3 +1,4 @@ +using System; using System.Globalization; using System.Xml; using Emby.Naming.TV; @@ -48,16 +49,20 @@ namespace MediaBrowser.XbmcMetadata.Parsers { case "id": { - item.TrySetProviderId(MetadataProvider.Imdb, reader.GetAttribute("IMDB")); + // Get ids from attributes item.TrySetProviderId(MetadataProvider.Tmdb, reader.GetAttribute("TMDB")); + item.TrySetProviderId(MetadataProvider.Tvdb, reader.GetAttribute("TVDB")); + string? imdbId = reader.GetAttribute("IMDB"); - string? tvdbId = reader.GetAttribute("TVDB"); - if (string.IsNullOrWhiteSpace(tvdbId)) + // Read id from content + // Content can be arbitrary according to Kodi wiki, so only parse if we are sure it matches a provider-specific schema + var contentId = reader.ReadElementContentAsString(); + if (string.IsNullOrEmpty(imdbId) && contentId.StartsWith("tt", StringComparison.Ordinal)) { - tvdbId = reader.ReadElementContentAsString(); + imdbId = contentId; } - item.TrySetProviderId(MetadataProvider.Tvdb, tvdbId); + item.TrySetProviderId(MetadataProvider.Imdb, imdbId); break; } |
