Explorar o código

Backport pull request #11621 from jellyfin/release-10.9.z

Handle exception for unexpected audio file YEAR tag values

Original-merge: d5dc4435d9d0e2a1bbbb64a9133134afa9655da6

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
nfmccrina hai 1 ano
pai
achega
4385430f05

+ 1 - 0
CONTRIBUTORS.md

@@ -255,3 +255,4 @@
  - [JPUC1143](https://github.com/Jpuc1143/)
  - [0x25CBFC4F](https://github.com/0x25CBFC4F)
  - [Robert Lützner](https://github.com/rluetzner)
+ - [Nathan McCrina](https://github.com/nfmccrina)

+ 13 - 1
MediaBrowser.Providers/MediaInfo/AudioFileProber.cs

@@ -15,6 +15,7 @@ using MediaBrowser.Model.Dlna;
 using MediaBrowser.Model.Dto;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.MediaInfo;
+using Microsoft.Extensions.Logging;
 using TagLib;
 
 namespace MediaBrowser.Providers.MediaInfo
@@ -27,6 +28,7 @@ namespace MediaBrowser.Providers.MediaInfo
         private readonly IMediaEncoder _mediaEncoder;
         private readonly IItemRepository _itemRepo;
         private readonly ILibraryManager _libraryManager;
+        private readonly ILogger<AudioFileProber> _logger;
         private readonly IMediaSourceManager _mediaSourceManager;
         private readonly LyricResolver _lyricResolver;
         private readonly ILyricManager _lyricManager;
@@ -34,6 +36,7 @@ namespace MediaBrowser.Providers.MediaInfo
         /// <summary>
         /// Initializes a new instance of the <see cref="AudioFileProber"/> class.
         /// </summary>
+        /// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
         /// <param name="mediaSourceManager">Instance of the <see cref="IMediaSourceManager"/> interface.</param>
         /// <param name="mediaEncoder">Instance of the <see cref="IMediaEncoder"/> interface.</param>
         /// <param name="itemRepo">Instance of the <see cref="IItemRepository"/> interface.</param>
@@ -41,6 +44,7 @@ namespace MediaBrowser.Providers.MediaInfo
         /// <param name="lyricResolver">Instance of the <see cref="LyricResolver"/> interface.</param>
         /// <param name="lyricManager">Instance of the <see cref="ILyricManager"/> interface.</param>
         public AudioFileProber(
+            ILogger<AudioFileProber> logger,
             IMediaSourceManager mediaSourceManager,
             IMediaEncoder mediaEncoder,
             IItemRepository itemRepo,
@@ -51,6 +55,7 @@ namespace MediaBrowser.Providers.MediaInfo
             _mediaEncoder = mediaEncoder;
             _itemRepo = itemRepo;
             _libraryManager = libraryManager;
+            _logger = logger;
             _mediaSourceManager = mediaSourceManager;
             _lyricResolver = lyricResolver;
             _lyricManager = lyricManager;
@@ -276,7 +281,14 @@ namespace MediaBrowser.Providers.MediaInfo
 
                     if (!audio.PremiereDate.HasValue)
                     {
-                        audio.PremiereDate = new DateTime(year, 01, 01);
+                        try
+                        {
+                            audio.PremiereDate = new DateTime(year, 01, 01);
+                        }
+                        catch (ArgumentOutOfRangeException ex)
+                        {
+                            _logger.LogError(ex, "Error parsing YEAR tag in {File}. '{TagValue}' is an invalid year.", audio.Path, tags.Year);
+                        }
                     }
                 }
 

+ 1 - 0
MediaBrowser.Providers/MediaInfo/ProbeProvider.cs

@@ -103,6 +103,7 @@ namespace MediaBrowser.Providers.MediaInfo
                 _subtitleResolver);
 
             _audioProber = new AudioFileProber(
+                loggerFactory.CreateLogger<AudioFileProber>(),
                 mediaSourceManager,
                 mediaEncoder,
                 itemRepo,