aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs')
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs184
1 files changed, 162 insertions, 22 deletions
diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
index c287113c5..f2d0bdc54 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
@@ -63,14 +63,14 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// <exception cref="ArgumentException"><c>metadataFile</c> is <c>null</c> or empty.</exception>
public void Fetch(MetadataResult<T> item, string metadataFile, CancellationToken cancellationToken)
{
- if (item == null)
+ if (item.Item == null)
{
- throw new ArgumentNullException(nameof(item));
+ throw new ArgumentException("Item can't be null.", nameof(item));
}
if (string.IsNullOrEmpty(metadataFile))
{
- throw new ArgumentException("The metadata file was empty or null.", nameof(metadataFile));
+ throw new ArgumentException("The metadata filepath was empty.", nameof(metadataFile));
}
_validProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
@@ -270,17 +270,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(val))
{
- if (DateTime.TryParseExact(val, BaseNfoSaver.DateAddedFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var added))
- {
- item.DateCreated = added.ToUniversalTime();
- }
- else if (DateTime.TryParse(val, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out added))
+ if (DateTime.TryParse(val, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var added))
{
item.DateCreated = added.ToUniversalTime();
}
else
{
- Logger.LogWarning("Invalid Added value found: " + val);
+ Logger.LogWarning("Invalid Added value found: {Value}", val);
}
}
@@ -299,11 +295,16 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "name":
case "title":
case "localtitle":
item.Name = reader.ReadElementContentAsString();
break;
+ case "sortname":
+ item.SortName = reader.ReadElementContentAsString();
+ break;
+
case "criticrating":
{
var text = reader.ReadElementContentAsString();
@@ -384,16 +385,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
case "tagline":
- {
- var val = reader.ReadElementContentAsString();
-
- if (!string.IsNullOrWhiteSpace(val))
- {
- item.Tagline = val;
- }
-
- break;
- }
+ item.Tagline = reader.ReadElementContentAsString();
+ break;
case "country":
{
@@ -635,7 +628,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(val))
{
- if (DateTime.TryParseExact(val, formatString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var date) && date.Year > 1850)
+ if (DateTime.TryParseExact(val, formatString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var date) && date.Year > 1850)
{
item.PremiereDate = date.ToUniversalTime();
item.ProductionYear = date.Year;
@@ -653,7 +646,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(val))
{
- if (DateTime.TryParseExact(val, formatString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var date) && date.Year > 1850)
+ if (DateTime.TryParseExact(val, formatString, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var date) && date.Year > 1850)
{
item.EndDate = date.ToUniversalTime();
}
@@ -710,6 +703,38 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "uniqueid":
+ {
+ if (reader.IsEmptyElement)
+ {
+ reader.Read();
+ break;
+ }
+
+ var provider = reader.GetAttribute("type");
+ var id = reader.ReadElementContentAsString();
+ if (!string.IsNullOrWhiteSpace(provider) && !string.IsNullOrWhiteSpace(id))
+ {
+ item.SetProviderId(provider, id);
+ }
+
+ break;
+ }
+
+ case "musicBrainzArtistID":
+ {
+ if (reader.IsEmptyElement)
+ {
+ reader.Read();
+ break;
+ }
+
+ var id = reader.ReadElementContentAsString();
+ item.SetProviderId(MetadataProvider.MusicBrainzArtist.ToString(), id);
+
+ break;
+ }
+
default:
string readerName = reader.Name;
if (_validProviderIds.TryGetValue(readerName, out string? providerIdValue))
@@ -797,6 +822,22 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "subtitle":
+ {
+ if (reader.IsEmptyElement)
+ {
+ reader.Read();
+ continue;
+ }
+
+ using (var subtree = reader.ReadSubtree())
+ {
+ FetchFromSubtitleNode(subtree, item);
+ }
+
+ break;
+ }
+
default:
reader.Skip();
break;
@@ -854,6 +895,90 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "aspect":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (item is Video video)
+ {
+ video.AspectRatio = val;
+ }
+
+ break;
+ }
+
+ case "width":
+ {
+ var val = reader.ReadElementContentAsInt();
+
+ if (item is Video video)
+ {
+ video.Width = val;
+ }
+
+ break;
+ }
+
+ case "height":
+ {
+ var val = reader.ReadElementContentAsInt();
+
+ if (item is Video video)
+ {
+ video.Height = val;
+ }
+
+ break;
+ }
+
+ case "durationinseconds":
+ {
+ var val = reader.ReadElementContentAsInt();
+
+ if (item is Video video)
+ {
+ video.RunTimeTicks = new TimeSpan(0, 0, val).Ticks;
+ }
+
+ break;
+ }
+
+ default:
+ reader.Skip();
+ break;
+ }
+ }
+ else
+ {
+ reader.Read();
+ }
+ }
+ }
+
+ private void FetchFromSubtitleNode(XmlReader reader, T item)
+ {
+ reader.MoveToContent();
+ reader.Read();
+
+ // Loop through each element
+ while (!reader.EOF && reader.ReadState == ReadState.Interactive)
+ {
+ if (reader.NodeType == XmlNodeType.Element)
+ {
+ switch (reader.Name)
+ {
+ case "language":
+ {
+ _ = reader.ReadElementContentAsString();
+
+ if (item is Video video)
+ {
+ video.HasSubtitles = true;
+ }
+
+ break;
+ }
+
default:
reader.Skip();
break;
@@ -877,6 +1002,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
var type = PersonType.Actor; // If type is not specified assume actor
var role = string.Empty;
int? sortOrder = null;
+ string? imageUrl = null;
reader.MoveToContent();
reader.Read();
@@ -904,6 +1030,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "order":
case "sortorder":
{
var val = reader.ReadElementContentAsString();
@@ -919,6 +1046,18 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
+ case "thumb":
+ {
+ var val = reader.ReadElementContentAsString();
+
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ imageUrl = val;
+ }
+
+ break;
+ }
+
default:
reader.Skip();
break;
@@ -935,7 +1074,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
Name = name.Trim(),
Role = role,
Type = type,
- SortOrder = sortOrder
+ SortOrder = sortOrder,
+ ImageUrl = imageUrl
};
}