Add TryReadInt to XmlReaderExtensions
This commit is contained in:
parent
8a7a1cc723
commit
0e51ffa169
|
@ -26,6 +26,19 @@ public static class XmlReaderExtensions
|
|||
return reader.ReadElementContentAsString().Trim();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads an int from the current node.
|
||||
/// </summary>
|
||||
/// <param name="reader">The <see cref="XmlReader"/>.</param>
|
||||
/// <param name="value">The parsed <c>int</c>.</param>
|
||||
/// <returns>A value indicating whether the parsing succeeded.</returns>
|
||||
public static bool TryReadInt(this XmlReader reader, out int value)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(reader);
|
||||
|
||||
return int.TryParse(reader.ReadElementContentAsString(), CultureInfo.InvariantCulture, out value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a <see cref="DateTime"/> from the current node.
|
||||
/// </summary>
|
||||
|
|
|
@ -234,20 +234,16 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
|||
item.CustomRating = reader.ReadNormalizedString();
|
||||
break;
|
||||
case "RunningTime":
|
||||
{
|
||||
var text = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(text))
|
||||
var runtimeText = reader.ReadElementContentAsString();
|
||||
if (!string.IsNullOrWhiteSpace(runtimeText))
|
||||
{
|
||||
if (int.TryParse(text.AsSpan().LeftPart(' '), NumberStyles.Integer, CultureInfo.InvariantCulture, out var runtime))
|
||||
if (int.TryParse(runtimeText.AsSpan().LeftPart(' '), NumberStyles.Integer, CultureInfo.InvariantCulture, out var runtime))
|
||||
{
|
||||
item.RunTimeTicks = TimeSpan.FromMinutes(runtime).Ticks;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "AspectRatio":
|
||||
var aspectRatio = reader.ReadNormalizedString();
|
||||
if (!string.IsNullOrEmpty(aspectRatio) && item is IHasAspectRatio hasAspectRatio)
|
||||
|
@ -256,7 +252,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
case "LockData":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
@ -336,20 +331,12 @@ namespace MediaBrowser.LocalMetadata.Parsers
|
|||
}
|
||||
|
||||
case "ProductionYear":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
if (reader.TryReadInt(out var productionYear) && productionYear > 1850)
|
||||
{
|
||||
if (int.TryParse(val, out var productionYear) && productionYear > 1850)
|
||||
{
|
||||
item.ProductionYear = productionYear;
|
||||
}
|
||||
item.ProductionYear = productionYear;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "Rating":
|
||||
case "IMDBrating":
|
||||
{
|
||||
|
|
|
@ -325,20 +325,16 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
}
|
||||
|
||||
case "playcount":
|
||||
if (reader.TryReadInt(out var count)
|
||||
&& Guid.TryParse(nfoConfiguration.UserId, out var playCountUserId))
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var count)
|
||||
&& Guid.TryParse(nfoConfiguration.UserId, out var playCountUserId))
|
||||
{
|
||||
var user = _userManager.GetUserById(playCountUserId);
|
||||
userData = _userDataManager.GetUserData(user, item);
|
||||
userData.PlayCount = count;
|
||||
_userDataManager.SaveUserData(user, item, userData, UserDataSaveReason.Import, CancellationToken.None);
|
||||
}
|
||||
|
||||
break;
|
||||
var user = _userManager.GetUserById(playCountUserId);
|
||||
userData = _userDataManager.GetUserData(user, item);
|
||||
userData.PlayCount = count;
|
||||
_userDataManager.SaveUserData(user, item, userData, UserDataSaveReason.Import, CancellationToken.None);
|
||||
}
|
||||
|
||||
break;
|
||||
case "lastplayed":
|
||||
if (reader.TryReadDateTime(Logger, out var lastPlayed)
|
||||
&& Guid.TryParse(nfoConfiguration.UserId, out var lastPlayedUserId))
|
||||
|
@ -398,17 +394,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
item.CustomRating = reader.ReadNormalizedString();
|
||||
break;
|
||||
case "runtime":
|
||||
var runtimeText = reader.ReadElementContentAsString();
|
||||
if (int.TryParse(runtimeText.AsSpan().LeftPart(' '), NumberStyles.Integer, CultureInfo.InvariantCulture, out var runtime))
|
||||
{
|
||||
var text = reader.ReadElementContentAsString();
|
||||
|
||||
if (int.TryParse(text.AsSpan().LeftPart(' '), NumberStyles.Integer, CultureInfo.InvariantCulture, out var runtime))
|
||||
{
|
||||
item.RunTimeTicks = TimeSpan.FromMinutes(runtime).Ticks;
|
||||
}
|
||||
|
||||
break;
|
||||
item.RunTimeTicks = TimeSpan.FromMinutes(runtime).Ticks;
|
||||
}
|
||||
|
||||
break;
|
||||
case "aspectratio":
|
||||
var aspectRatio = reader.ReadNormalizedString();
|
||||
if (!string.IsNullOrEmpty(aspectRatio) && item is IHasAspectRatio hasAspectRatio)
|
||||
|
@ -502,17 +494,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
|
||||
break;
|
||||
case "year":
|
||||
if (reader.TryReadInt(out var productionYear) && productionYear > 1850)
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (int.TryParse(val, out var productionYear) && productionYear > 1850)
|
||||
{
|
||||
item.ProductionYear = productionYear;
|
||||
}
|
||||
|
||||
break;
|
||||
item.ProductionYear = productionYear;
|
||||
}
|
||||
|
||||
break;
|
||||
case "rating":
|
||||
{
|
||||
var rating = reader.ReadElementContentAsString();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
|
@ -113,130 +112,49 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
switch (reader.Name)
|
||||
{
|
||||
case "season":
|
||||
if (reader.TryReadInt(out var seasonNumber))
|
||||
{
|
||||
var number = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(number))
|
||||
{
|
||||
if (int.TryParse(number, out var num))
|
||||
{
|
||||
item.ParentIndexNumber = num;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
item.ParentIndexNumber = seasonNumber;
|
||||
}
|
||||
|
||||
break;
|
||||
case "episode":
|
||||
if (reader.TryReadInt(out var episodeNumber))
|
||||
{
|
||||
var number = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(number))
|
||||
{
|
||||
if (int.TryParse(number, out var num))
|
||||
{
|
||||
item.IndexNumber = num;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
item.IndexNumber = episodeNumber;
|
||||
}
|
||||
|
||||
break;
|
||||
case "episodenumberend":
|
||||
if (reader.TryReadInt(out var episodeNumberEnd))
|
||||
{
|
||||
var number = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(number))
|
||||
{
|
||||
if (int.TryParse(number, out var num))
|
||||
{
|
||||
item.IndexNumberEnd = num;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
item.IndexNumberEnd = episodeNumberEnd;
|
||||
}
|
||||
|
||||
break;
|
||||
case "airsbefore_episode":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
// int.TryParse is local aware, so it can be problematic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var rval))
|
||||
{
|
||||
item.AirsBeforeEpisodeNumber = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "airsafter_season":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
// int.TryParse is local aware, so it can be problematic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var rval))
|
||||
{
|
||||
item.AirsAfterSeasonNumber = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "airsbefore_season":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
// int.TryParse is local aware, so it can be problematic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var rval))
|
||||
{
|
||||
item.AirsBeforeSeasonNumber = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "displayseason":
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
// int.TryParse is local aware, so it can be problematic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var rval))
|
||||
{
|
||||
item.AirsBeforeSeasonNumber = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "displayepisode":
|
||||
if (reader.TryReadInt(out var airsBeforeEpisode))
|
||||
{
|
||||
var val = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(val))
|
||||
{
|
||||
// int.TryParse is local aware, so it can be problematic, force us culture
|
||||
if (int.TryParse(val, NumberStyles.Integer, CultureInfo.InvariantCulture, out var rval))
|
||||
{
|
||||
item.AirsBeforeEpisodeNumber = rval;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
item.AirsBeforeEpisodeNumber = airsBeforeEpisode;
|
||||
}
|
||||
|
||||
break;
|
||||
case "airsafter_season":
|
||||
if (reader.TryReadInt(out var airsAfterSeason))
|
||||
{
|
||||
item.AirsAfterSeasonNumber = airsAfterSeason;
|
||||
}
|
||||
|
||||
break;
|
||||
case "airsbefore_season":
|
||||
case "displayseason":
|
||||
if (reader.TryReadInt(out var airsBeforeSeason))
|
||||
{
|
||||
item.AirsBeforeSeasonNumber = airsBeforeSeason;
|
||||
}
|
||||
|
||||
break;
|
||||
case "showtitle":
|
||||
item.SeriesName = reader.ReadNormalizedString();
|
||||
break;
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
using System.Globalization;
|
||||
using System.Xml;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
|
@ -42,20 +41,12 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
switch (reader.Name)
|
||||
{
|
||||
case "seasonnumber":
|
||||
if (reader.TryReadInt(out var seasonNumber))
|
||||
{
|
||||
var number = reader.ReadElementContentAsString();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(number))
|
||||
{
|
||||
if (int.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out var num))
|
||||
{
|
||||
item.IndexNumber = num;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
item.IndexNumber = seasonNumber;
|
||||
}
|
||||
|
||||
break;
|
||||
case "seasonname":
|
||||
item.Name = reader.ReadNormalizedString();
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue
Block a user