More miscellaneous cleanup

This commit is contained in:
Patrick Barron 2023-10-06 16:18:33 -04:00
parent 0e51ffa169
commit 1d0ecd3188
2 changed files with 165 additions and 285 deletions

View File

@ -253,17 +253,8 @@ namespace MediaBrowser.LocalMetadata.Parsers
break; break;
case "LockData": case "LockData":
{ item.IsLocked = string.Equals(reader.ReadElementContentAsString(), "true", StringComparison.OrdinalIgnoreCase);
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
item.IsLocked = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
}
break; break;
}
case "Network": case "Network":
foreach (var name in reader.GetStringArray()) foreach (var name in reader.GetStringArray())
{ {
@ -857,11 +848,8 @@ namespace MediaBrowser.LocalMetadata.Parsers
item.UserId = reader.ReadNormalizedString(); item.UserId = reader.ReadNormalizedString();
break; break;
case "CanEdit": case "CanEdit":
{
item.CanEdit = string.Equals(reader.ReadElementContentAsString(), "true", StringComparison.OrdinalIgnoreCase); item.CanEdit = string.Equals(reader.ReadElementContentAsString(), "true", StringComparison.OrdinalIgnoreCase);
break; break;
}
default: default:
reader.Skip(); reader.Skip();
break; break;

View File

@ -262,9 +262,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
protected virtual void FetchDataFromXmlNode(XmlReader reader, MetadataResult<T> itemResult) protected virtual void FetchDataFromXmlNode(XmlReader reader, MetadataResult<T> itemResult)
{ {
var item = itemResult.Item; var item = itemResult.Item;
var nfoConfiguration = _config.GetNfoConfiguration(); var nfoConfiguration = _config.GetNfoConfiguration();
UserItemData? userData = null; UserItemData? userData;
switch (reader.Name) switch (reader.Name)
{ {
@ -287,17 +286,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers
item.SortName = reader.ReadNormalizedString(); item.SortName = reader.ReadNormalizedString();
break; break;
case "criticrating": case "criticrating":
{ var criticRatingText = reader.ReadElementContentAsString();
var text = reader.ReadElementContentAsString(); if (float.TryParse(criticRatingText, CultureInfo.InvariantCulture, out var value))
if (float.TryParse(text, CultureInfo.InvariantCulture, out var value))
{ {
item.CriticRating = value; item.CriticRating = value;
} }
break; break;
}
case "sorttitle": case "sorttitle":
item.ForcedSortName = reader.ReadNormalizedString(); item.ForcedSortName = reader.ReadNormalizedString();
break; break;
@ -310,20 +305,16 @@ namespace MediaBrowser.XbmcMetadata.Parsers
item.PreferredMetadataLanguage = reader.ReadNormalizedString(); item.PreferredMetadataLanguage = reader.ReadNormalizedString();
break; break;
case "watched": case "watched":
{ var played = reader.ReadElementContentAsBoolean();
var val = reader.ReadElementContentAsBoolean();
if (!string.IsNullOrWhiteSpace(nfoConfiguration.UserId)) if (!string.IsNullOrWhiteSpace(nfoConfiguration.UserId))
{ {
var user = _userManager.GetUserById(Guid.Parse(nfoConfiguration.UserId)); var user = _userManager.GetUserById(Guid.Parse(nfoConfiguration.UserId));
userData = _userDataManager.GetUserData(user, item); userData = _userDataManager.GetUserData(user, item);
userData.Played = val; userData.Played = played;
_userDataManager.SaveUserData(user, item, userData, UserDataSaveReason.Import, CancellationToken.None); _userDataManager.SaveUserData(user, item, userData, UserDataSaveReason.Import, CancellationToken.None);
} }
break; break;
}
case "playcount": case "playcount":
if (reader.TryReadInt(out var count) if (reader.TryReadInt(out var count)
&& Guid.TryParse(nfoConfiguration.UserId, out var playCountUserId)) && Guid.TryParse(nfoConfiguration.UserId, out var playCountUserId))
@ -410,17 +401,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break; break;
case "lockdata": case "lockdata":
{ item.IsLocked = string.Equals(reader.ReadElementContentAsString(), "true", StringComparison.OrdinalIgnoreCase);
var val = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(val))
{
item.IsLocked = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
}
break; break;
}
case "studio": case "studio":
var studio = reader.ReadNormalizedString(); var studio = reader.ReadNormalizedString();
if (!string.IsNullOrEmpty(studio)) if (!string.IsNullOrEmpty(studio))
@ -501,33 +483,17 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break; break;
case "rating": case "rating":
{ var rating = reader.ReadElementContentAsString().Replace(',', '.');
var rating = reader.ReadElementContentAsString();
// All external meta is saving this as '.' for decimal I believe...but just to be sure // All external meta is saving this as '.' for decimal I believe...but just to be sure
if (float.TryParse(rating.Replace(',', '.'), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var val)) if (float.TryParse(rating, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var communityRating))
{ {
item.CommunityRating = val; item.CommunityRating = communityRating;
} }
break; break;
}
case "ratings": case "ratings":
{ FetchFromRatingsNode(reader, item);
if (!reader.IsEmptyElement)
{
using var subtree = reader.ReadSubtree();
FetchFromRatingsNode(subtree, item);
}
else
{
reader.Read();
}
break; break;
}
case "aired": case "aired":
case "formed": case "formed":
case "premiered": case "premiered":
@ -575,24 +541,9 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break; break;
case "fileinfo": case "fileinfo":
{ FetchFromFileInfoNode(reader, item);
if (!reader.IsEmptyElement)
{
using (var subtree = reader.ReadSubtree())
{
FetchFromFileInfoNode(subtree, item);
}
}
else
{
reader.Read();
}
break; break;
}
case "uniqueid": case "uniqueid":
{
if (reader.IsEmptyElement) if (reader.IsEmptyElement)
{ {
reader.Read(); reader.Read();
@ -600,21 +551,16 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
var provider = reader.GetAttribute("type"); var provider = reader.GetAttribute("type");
var id = reader.ReadElementContentAsString(); var providerId = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(provider) && !string.IsNullOrWhiteSpace(id)) if (!string.IsNullOrWhiteSpace(provider) && !string.IsNullOrWhiteSpace(providerId))
{ {
item.SetProviderId(provider, id); item.SetProviderId(provider, providerId);
} }
break; break;
}
case "thumb": case "thumb":
{
FetchThumbNode(reader, itemResult, "thumb"); FetchThumbNode(reader, itemResult, "thumb");
break; break;
}
case "fanart": case "fanart":
{ {
if (reader.IsEmptyElement) if (reader.IsEmptyElement)
@ -719,217 +665,162 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
} }
private void FetchFromFileInfoNode(XmlReader reader, T item) private void FetchFromFileInfoNode(XmlReader parentReader, T item)
{ {
if (parentReader.IsEmptyElement)
{
parentReader.Read();
return;
}
using var reader = parentReader.ReadSubtree();
reader.MoveToContent(); reader.MoveToContent();
reader.Read(); reader.Read();
// Loop through each element // Loop through each element
while (!reader.EOF && reader.ReadState == ReadState.Interactive) while (!reader.EOF && reader.ReadState == ReadState.Interactive)
{ {
if (reader.NodeType == XmlNodeType.Element) if (reader.NodeType != XmlNodeType.Element)
{ {
reader.Read();
continue;
}
switch (reader.Name) switch (reader.Name)
{ {
case "streamdetails": case "streamdetails":
{ FetchFromStreamDetailsNode(reader, item);
if (reader.IsEmptyElement)
{
reader.Read();
continue;
}
using (var subtree = reader.ReadSubtree())
{
FetchFromStreamDetailsNode(subtree, item);
}
break; break;
}
default: default:
reader.Skip(); reader.Skip();
break; break;
} }
} }
else
{
reader.Read();
}
}
} }
private void FetchFromStreamDetailsNode(XmlReader reader, T item) private void FetchFromStreamDetailsNode(XmlReader parentReader, T item)
{ {
if (parentReader.IsEmptyElement)
{
parentReader.Read();
return;
}
using var reader = parentReader.ReadSubtree();
reader.MoveToContent(); reader.MoveToContent();
reader.Read(); reader.Read();
// Loop through each element // Loop through each element
while (!reader.EOF && reader.ReadState == ReadState.Interactive) while (!reader.EOF && reader.ReadState == ReadState.Interactive)
{ {
if (reader.NodeType == XmlNodeType.Element) if (reader.NodeType != XmlNodeType.Element)
{ {
reader.Read();
continue;
}
switch (reader.Name) switch (reader.Name)
{ {
case "video": case "video":
{ FetchFromVideoNode(reader, item);
if (reader.IsEmptyElement)
{
reader.Read();
continue;
}
using (var subtree = reader.ReadSubtree())
{
FetchFromVideoNode(subtree, item);
}
break; break;
}
case "subtitle": case "subtitle":
{ FetchFromSubtitleNode(reader, item);
if (reader.IsEmptyElement)
{
reader.Read();
continue;
}
using (var subtree = reader.ReadSubtree())
{
FetchFromSubtitleNode(subtree, item);
}
break; break;
}
default: default:
reader.Skip(); reader.Skip();
break; break;
} }
} }
else
{
reader.Read();
}
}
} }
private void FetchFromVideoNode(XmlReader reader, T item) private void FetchFromVideoNode(XmlReader parentReader, T item)
{ {
if (parentReader.IsEmptyElement)
{
parentReader.Read();
return;
}
using var reader = parentReader.ReadSubtree();
reader.MoveToContent(); reader.MoveToContent();
reader.Read(); reader.Read();
// Loop through each element // Loop through each element
while (!reader.EOF && reader.ReadState == ReadState.Interactive) while (!reader.EOF && reader.ReadState == ReadState.Interactive)
{ {
if (reader.NodeType == XmlNodeType.Element) if (reader.NodeType != XmlNodeType.Element || item is not Video video)
{ {
reader.Read();
continue;
}
switch (reader.Name) switch (reader.Name)
{ {
case "format3d": case "format3d":
{ var format = reader.ReadElementContentAsString();
var val = reader.ReadElementContentAsString(); if (string.Equals("HSBS", format, StringComparison.OrdinalIgnoreCase))
var video = item as Video;
if (video is not null)
{
if (string.Equals("HSBS", val, StringComparison.OrdinalIgnoreCase))
{ {
video.Video3DFormat = Video3DFormat.HalfSideBySide; video.Video3DFormat = Video3DFormat.HalfSideBySide;
} }
else if (string.Equals("HTAB", val, StringComparison.OrdinalIgnoreCase)) else if (string.Equals("HTAB", format, StringComparison.OrdinalIgnoreCase))
{ {
video.Video3DFormat = Video3DFormat.HalfTopAndBottom; video.Video3DFormat = Video3DFormat.HalfTopAndBottom;
} }
else if (string.Equals("FTAB", val, StringComparison.OrdinalIgnoreCase)) else if (string.Equals("FTAB", format, StringComparison.OrdinalIgnoreCase))
{ {
video.Video3DFormat = Video3DFormat.FullTopAndBottom; video.Video3DFormat = Video3DFormat.FullTopAndBottom;
} }
else if (string.Equals("FSBS", val, StringComparison.OrdinalIgnoreCase)) else if (string.Equals("FSBS", format, StringComparison.OrdinalIgnoreCase))
{ {
video.Video3DFormat = Video3DFormat.FullSideBySide; video.Video3DFormat = Video3DFormat.FullSideBySide;
} }
else if (string.Equals("MVC", val, StringComparison.OrdinalIgnoreCase)) else if (string.Equals("MVC", format, StringComparison.OrdinalIgnoreCase))
{ {
video.Video3DFormat = Video3DFormat.MVC; video.Video3DFormat = Video3DFormat.MVC;
} }
}
break; break;
}
case "aspect": case "aspect":
{ video.AspectRatio = reader.ReadNormalizedString();
var val = reader.ReadElementContentAsString();
if (item is Video video)
{
video.AspectRatio = val;
}
break; break;
}
case "width": case "width":
{ video.Width = reader.ReadElementContentAsInt();
var val = reader.ReadElementContentAsInt();
if (item is Video video)
{
video.Width = val;
}
break; break;
}
case "height": case "height":
{ video.Height = reader.ReadElementContentAsInt();
var val = reader.ReadElementContentAsInt();
if (item is Video video)
{
video.Height = val;
}
break; break;
}
case "durationinseconds": case "durationinseconds":
{ video.RunTimeTicks = new TimeSpan(0, 0, reader.ReadElementContentAsInt()).Ticks;
var val = reader.ReadElementContentAsInt();
if (item is Video video)
{
video.RunTimeTicks = new TimeSpan(0, 0, val).Ticks;
}
break; break;
}
default: default:
reader.Skip(); reader.Skip();
break; break;
} }
} }
else
{
reader.Read();
}
}
} }
private void FetchFromSubtitleNode(XmlReader reader, T item) private void FetchFromSubtitleNode(XmlReader parentReader, T item)
{ {
if (parentReader.IsEmptyElement)
{
parentReader.Read();
return;
}
using var reader = parentReader.ReadSubtree();
reader.MoveToContent(); reader.MoveToContent();
reader.Read(); reader.Read();
// Loop through each element // Loop through each element
while (!reader.EOF && reader.ReadState == ReadState.Interactive) while (!reader.EOF && reader.ReadState == ReadState.Interactive)
{ {
if (reader.NodeType == XmlNodeType.Element) if (reader.NodeType != XmlNodeType.Element)
{ {
reader.Read();
continue;
}
switch (reader.Name) switch (reader.Name)
{ {
case "language": case "language":
@ -940,21 +831,22 @@ namespace MediaBrowser.XbmcMetadata.Parsers
} }
break; break;
default: default:
reader.Skip(); reader.Skip();
break; break;
} }
} }
else
{
reader.Read();
}
}
} }
private void FetchFromRatingsNode(XmlReader reader, T item) private void FetchFromRatingsNode(XmlReader parentReader, T item)
{ {
if (parentReader.IsEmptyElement)
{
parentReader.Read();
return;
}
using var reader = parentReader.ReadSubtree();
reader.MoveToContent(); reader.MoveToContent();
reader.Read(); reader.Read();