mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Limit removal scope
This commit is contained in:
parent
19a89d5a60
commit
f9e7d5229e
@ -1884,7 +1884,7 @@ namespace Emby.Server.Implementations.Library
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var index = item.GetImageIndex(img);
|
var index = item.GetImageIndex(img);
|
||||||
image = await ConvertImageToLocal(item, img, index, removeOnFailure: true).ConfigureAwait(false);
|
image = await ConvertImageToLocal(item, img, index, true).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (ArgumentException)
|
catch (ArgumentException)
|
||||||
{
|
{
|
||||||
|
@ -189,12 +189,27 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
{
|
{
|
||||||
_fileSystem.DeleteFile(currentPath);
|
_fileSystem.DeleteFile(currentPath);
|
||||||
|
|
||||||
// Remove containing directory if empty
|
// Remove local episode metadata directory if it exists and is empty
|
||||||
var folder = Path.GetDirectoryName(currentPath);
|
var directory = Path.GetDirectoryName(currentPath);
|
||||||
FileSystemHelper.DeleteEmptyFolders(_fileSystem, folder, _logger);
|
if (item is Episode && directory.Equals("metadata", StringComparison.Ordinal))
|
||||||
if (!_fileSystem.GetFiles(folder).Any())
|
|
||||||
{
|
{
|
||||||
Directory.Delete(folder);
|
var parentDirectoryPath = Directory.GetParent(currentPath).FullName;
|
||||||
|
if (!_fileSystem.GetFiles(parentDirectoryPath).Any())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_logger.LogInformation("Deleting empty local metadata folder {Folder}", parentDirectoryPath);
|
||||||
|
Directory.Delete(parentDirectoryPath);
|
||||||
|
}
|
||||||
|
catch (UnauthorizedAccessException ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error deleting directory {Path}", parentDirectoryPath);
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Error deleting directory {Path}", parentDirectoryPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
|
@ -10,7 +10,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
using MediaBrowser.Controller.IO;
|
using MediaBrowser.Controller.Entities.TV;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.LiveTv;
|
using MediaBrowser.Controller.LiveTv;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
public bool ValidateImages(BaseItem item, IEnumerable<IImageProvider> providers, ImageRefreshOptions refreshOptions)
|
public bool ValidateImages(BaseItem item, IEnumerable<IImageProvider> providers, ImageRefreshOptions refreshOptions)
|
||||||
{
|
{
|
||||||
var hasChanges = false;
|
var hasChanges = false;
|
||||||
IDirectoryService directoryService = refreshOptions?.DirectoryService;
|
var directoryService = refreshOptions?.DirectoryService;
|
||||||
|
|
||||||
if (item is not Photo)
|
if (item is not Photo)
|
||||||
{
|
{
|
||||||
@ -360,10 +360,8 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
|
|
||||||
private void PruneImages(BaseItem item, IReadOnlyList<ItemImageInfo> images)
|
private void PruneImages(BaseItem item, IReadOnlyList<ItemImageInfo> images)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < images.Count; i++)
|
foreach (var image in images)
|
||||||
{
|
{
|
||||||
var image = images[i];
|
|
||||||
|
|
||||||
if (image.IsLocalFile)
|
if (image.IsLocalFile)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -378,16 +376,17 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
{
|
{
|
||||||
_logger.LogWarning(ex, "Unable to delete {Image}", image.Path);
|
_logger.LogWarning(ex, "Unable to delete {Image}", image.Path);
|
||||||
}
|
}
|
||||||
finally
|
}
|
||||||
{
|
}
|
||||||
// Always remove empty parent folder
|
|
||||||
var folder = Path.GetDirectoryName(image.Path);
|
// Cleanup old metadata directory for episodes if empty
|
||||||
FileSystemHelper.DeleteEmptyFolders(_fileSystem, folder, _logger);
|
if (item is Episode)
|
||||||
if (!_fileSystem.GetFiles(folder).Any())
|
{
|
||||||
{
|
var oldLocalMetadataDirectory = Path.Combine(item.ContainingFolderPath, "metadata");
|
||||||
Directory.Delete(folder);
|
var localImages = images.Where(i => i.Path.StartsWith(oldLocalMetadataDirectory, StringComparison.Ordinal)).ToList();
|
||||||
}
|
if (!_fileSystem.GetFiles(oldLocalMetadataDirectory).Any())
|
||||||
}
|
{
|
||||||
|
Directory.Delete(oldLocalMetadataDirectory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,10 +92,6 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var localImagesFailed = false;
|
|
||||||
|
|
||||||
var allImageProviders = ProviderManager.GetImageProviders(item, refreshOptions).ToList();
|
|
||||||
|
|
||||||
if (refreshOptions.RemoveOldMetadata && refreshOptions.ReplaceAllImages)
|
if (refreshOptions.RemoveOldMetadata && refreshOptions.ReplaceAllImages)
|
||||||
{
|
{
|
||||||
if (ImageProvider.RemoveImages(item))
|
if (ImageProvider.RemoveImages(item))
|
||||||
@ -105,6 +101,8 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start by validating images
|
// Start by validating images
|
||||||
|
var localImagesFailed = false;
|
||||||
|
var allImageProviders = ProviderManager.GetImageProviders(item, refreshOptions).ToList();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Always validate images and check for new locally stored ones.
|
// Always validate images and check for new locally stored ones.
|
||||||
@ -811,19 +809,16 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
{
|
{
|
||||||
var refreshResult = new RefreshResult();
|
var refreshResult = new RefreshResult();
|
||||||
|
|
||||||
var tmpDataMerged = false;
|
if (id is not null)
|
||||||
|
{
|
||||||
|
MergeNewData(temp.Item, id);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var provider in providers)
|
foreach (var provider in providers)
|
||||||
{
|
{
|
||||||
var providerName = provider.GetType().Name;
|
var providerName = provider.GetType().Name;
|
||||||
Logger.LogDebug("Running {Provider} for {Item}", providerName, logName);
|
Logger.LogDebug("Running {Provider} for {Item}", providerName, logName);
|
||||||
|
|
||||||
if (id is not null && !tmpDataMerged)
|
|
||||||
{
|
|
||||||
MergeNewData(temp.Item, id);
|
|
||||||
tmpDataMerged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var result = await provider.GetMetadata(id, cancellationToken).ConfigureAwait(false);
|
var result = await provider.GetMetadata(id, cancellationToken).ConfigureAwait(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user