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

This commit is contained in:
Tim Eisele 2025-06-12 01:31:14 +02:00 committed by GitHub
parent 1c4c9cf733
commit c22f24319b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 4 deletions

View File

@ -1,3 +1,4 @@
using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
@ -6,6 +7,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.MediaSegments; using MediaBrowser.Controller.MediaSegments;
using MediaBrowser.Controller.Trickplay; using MediaBrowser.Controller.Trickplay;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Library; namespace Emby.Server.Implementations.Library;
@ -18,6 +20,7 @@ public class ExternalDataManager : IExternalDataManager
private readonly IMediaSegmentManager _mediaSegmentManager; private readonly IMediaSegmentManager _mediaSegmentManager;
private readonly IPathManager _pathManager; private readonly IPathManager _pathManager;
private readonly ITrickplayManager _trickplayManager; private readonly ITrickplayManager _trickplayManager;
private readonly ILogger<ExternalDataManager> _logger;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ExternalDataManager"/> class. /// 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="mediaSegmentManager">The media segment manager.</param>
/// <param name="pathManager">The path manager.</param> /// <param name="pathManager">The path manager.</param>
/// <param name="trickplayManager">The trickplay manager.</param> /// <param name="trickplayManager">The trickplay manager.</param>
/// <param name="logger">The logger.</param>
public ExternalDataManager( public ExternalDataManager(
IKeyframeManager keyframeManager, IKeyframeManager keyframeManager,
IMediaSegmentManager mediaSegmentManager, IMediaSegmentManager mediaSegmentManager,
IPathManager pathManager, IPathManager pathManager,
ITrickplayManager trickplayManager) ITrickplayManager trickplayManager,
ILogger<ExternalDataManager> logger)
{ {
_keyframeManager = keyframeManager; _keyframeManager = keyframeManager;
_mediaSegmentManager = mediaSegmentManager; _mediaSegmentManager = mediaSegmentManager;
_pathManager = pathManager; _pathManager = pathManager;
_trickplayManager = trickplayManager; _trickplayManager = trickplayManager;
_logger = logger;
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -47,7 +53,14 @@ public class ExternalDataManager : IExternalDataManager
{ {
foreach (var path in validPaths) 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);
}
} }
} }

View File

@ -94,7 +94,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
if (!string.IsNullOrWhiteSpace(result.strArtist)) if (!string.IsNullOrWhiteSpace(result.strArtist))
{ {
item.AlbumArtists = new string[] { result.strArtist }; item.AlbumArtists = [result.strArtist];
} }
if (!string.IsNullOrEmpty(result.intYearReleased)) if (!string.IsNullOrEmpty(result.intYearReleased))
@ -104,7 +104,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
if (!string.IsNullOrEmpty(result.strGenre)) if (!string.IsNullOrEmpty(result.strGenre))
{ {
item.Genres = new[] { result.strGenre }; item.Genres = [result.strGenre];
} }
item.SetProviderId(MetadataProvider.AudioDbArtist, result.idArtist); 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 url = AudioDbArtistProvider.BaseUrl + "/album-mb.php?i=" + musicBrainzReleaseGroupId;
var path = GetAlbumInfoPath(_config.ApplicationPaths, 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)); Directory.CreateDirectory(Path.GetDirectoryName(path));