Sfoglia il codice sorgente

Properly handle file access issues in some cases (#14272)

Tim Eisele 1 settimana fa
parent
commit
c22f24319b

+ 15 - 2
Emby.Server.Implementations/Library/ExternalDataManager.cs

@@ -1,3 +1,4 @@
+using System;
 using System.IO;
 using System.Linq;
 using System.Threading;
@@ -6,6 +7,7 @@ using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.IO;
 using MediaBrowser.Controller.MediaSegments;
 using MediaBrowser.Controller.Trickplay;
+using Microsoft.Extensions.Logging;
 
 namespace Emby.Server.Implementations.Library;
 
@@ -18,6 +20,7 @@ public class ExternalDataManager : IExternalDataManager
     private readonly IMediaSegmentManager _mediaSegmentManager;
     private readonly IPathManager _pathManager;
     private readonly ITrickplayManager _trickplayManager;
+    private readonly ILogger<ExternalDataManager> _logger;
 
     /// <summary>
     /// Initializes a new instance of the <see cref="ExternalDataManager"/> class.
@@ -26,16 +29,19 @@ public class ExternalDataManager : IExternalDataManager
     /// <param name="mediaSegmentManager">The media segment manager.</param>
     /// <param name="pathManager">The path manager.</param>
     /// <param name="trickplayManager">The trickplay manager.</param>
+    /// <param name="logger">The logger.</param>
     public ExternalDataManager(
         IKeyframeManager keyframeManager,
         IMediaSegmentManager mediaSegmentManager,
         IPathManager pathManager,
-        ITrickplayManager trickplayManager)
+        ITrickplayManager trickplayManager,
+        ILogger<ExternalDataManager> logger)
     {
         _keyframeManager = keyframeManager;
         _mediaSegmentManager = mediaSegmentManager;
         _pathManager = pathManager;
         _trickplayManager = trickplayManager;
+        _logger = logger;
     }
 
     /// <inheritdoc/>
@@ -47,7 +53,14 @@ public class ExternalDataManager : IExternalDataManager
         {
             foreach (var path in validPaths)
             {
-                Directory.Delete(path, true);
+                try
+                {
+                    Directory.Delete(path, true);
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogWarning("Unable to prune external item data at {Path}: {Exception}", path, ex);
+                }
             }
         }
 

+ 7 - 2
MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumProvider.cs

@@ -94,7 +94,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
 
             if (!string.IsNullOrWhiteSpace(result.strArtist))
             {
-                item.AlbumArtists = new string[] { result.strArtist };
+                item.AlbumArtists = [result.strArtist];
             }
 
             if (!string.IsNullOrEmpty(result.intYearReleased))
@@ -104,7 +104,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
 
             if (!string.IsNullOrEmpty(result.strGenre))
             {
-                item.Genres = new[] { result.strGenre };
+                item.Genres = [result.strGenre];
             }
 
             item.SetProviderId(MetadataProvider.AudioDbArtist, result.idArtist);
@@ -170,6 +170,11 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
             var url = AudioDbArtistProvider.BaseUrl + "/album-mb.php?i=" + musicBrainzReleaseGroupId;
 
             var path = GetAlbumInfoPath(_config.ApplicationPaths, musicBrainzReleaseGroupId);
+            var fileInfo = _fileSystem.GetFileSystemInfo(path);
+            if (fileInfo.Exists && (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(fileInfo)).TotalDays <= 2)
+            {
+                return;
+            }
 
             Directory.CreateDirectory(Path.GetDirectoryName(path));