aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs
diff options
context:
space:
mode:
authorPatrick Barron <barronpm@gmail.com>2023-10-06 14:18:56 -0400
committerPatrick Barron <barronpm@gmail.com>2023-10-06 14:18:56 -0400
commit99832642cebcce3f93b49004a1dd10def3fb227d (patch)
treebf74280df1c7e7ff96f88be50550fe700cd539a2 /MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs
parent1a6ec2c74062e28552089a8b85dc5d45224d4e86 (diff)
Add TryParseDateTime and TryParseDateTimeExact to XmlReaderExtensions
Diffstat (limited to 'MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs')
-rw-r--r--MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs47
1 files changed, 47 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs b/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs
index 8e4b7c859..cb239e314 100644
--- a/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs
+++ b/MediaBrowser.Controller/Extensions/XmlReaderExtensions.cs
@@ -5,6 +5,7 @@ using System.Linq;
using System.Xml;
using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Entities;
+using Microsoft.Extensions.Logging;
namespace MediaBrowser.Controller.Extensions;
@@ -14,6 +15,52 @@ namespace MediaBrowser.Controller.Extensions;
public static class XmlReaderExtensions
{
/// <summary>
+ /// Parses a <see cref="DateTime"/> from the current node.
+ /// </summary>
+ /// <param name="reader">The <see cref="XmlReader"/>.</param>
+ /// <param name="logger">The <see cref="ILogger"/> to use on failure.</param>
+ /// <param name="value">The parsed <see cref="DateTime"/>.</param>
+ /// <returns>A value indicating whether the parsing succeeded.</returns>
+ public static bool TryReadDateTime(this XmlReader reader, ILogger logger, out DateTime value)
+ {
+ ArgumentNullException.ThrowIfNull(reader);
+ ArgumentNullException.ThrowIfNull(logger);
+
+ var text = reader.ReadElementContentAsString();
+ if (DateTime.TryParse(
+ text,
+ CultureInfo.InvariantCulture,
+ DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
+ out value))
+ {
+ return true;
+ }
+
+ logger.LogWarning("Invalid date: {Date}", text);
+ return false;
+ }
+
+ /// <summary>
+ /// Parses a <see cref="DateTime"/> from the current node.
+ /// </summary>
+ /// <param name="reader">The <see cref="XmlReader"/>.</param>
+ /// <param name="formatString">The date format string.</param>
+ /// <param name="value">The parsed <see cref="DateTime"/>.</param>
+ /// <returns>A value indicating whether the parsing succeeded.</returns>
+ public static bool TryReadDateTimeExact(this XmlReader reader, string formatString, out DateTime value)
+ {
+ ArgumentNullException.ThrowIfNull(reader);
+ ArgumentNullException.ThrowIfNull(formatString);
+
+ return DateTime.TryParseExact(
+ reader.ReadElementContentAsString(),
+ formatString,
+ CultureInfo.InvariantCulture,
+ DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
+ out value);
+ }
+
+ /// <summary>
/// Parses a <see cref="PersonInfo"/> from the xml node.
/// </summary>
/// <param name="reader">The <see cref="XmlReader"/>.</param>