From 6734450d40684d8f68ed9ebd76885b62613f7eb5 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Mon, 24 Jun 2024 20:28:58 -0400 Subject: Backport pull request #12025 from jellyfin/release-10.9.z Fix empty image folder removal for legacy locations Original-merge: 476dc01f4d5bf0fdf391935ef0759b0583bf7026 Merged-by: Bond-009 Backported-by: Joshua M. Boniface --- MediaBrowser.Controller/IO/FileSystemHelper.cs | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 MediaBrowser.Controller/IO/FileSystemHelper.cs (limited to 'MediaBrowser.Controller/IO/FileSystemHelper.cs') diff --git a/MediaBrowser.Controller/IO/FileSystemHelper.cs b/MediaBrowser.Controller/IO/FileSystemHelper.cs new file mode 100644 index 000000000..1a33c3aa8 --- /dev/null +++ b/MediaBrowser.Controller/IO/FileSystemHelper.cs @@ -0,0 +1,64 @@ +using System; +using System.IO; +using System.Linq; +using MediaBrowser.Model.IO; +using Microsoft.Extensions.Logging; + +namespace MediaBrowser.Controller.IO; + +/// +/// Helper methods for file system management. +/// +public static class FileSystemHelper +{ + /// + /// Deletes the file. + /// + /// The fileSystem. + /// The path. + /// The logger. + public static void DeleteFile(IFileSystem fileSystem, string path, ILogger logger) + { + try + { + fileSystem.DeleteFile(path); + } + catch (UnauthorizedAccessException ex) + { + logger.LogError(ex, "Error deleting file {Path}", path); + } + catch (IOException ex) + { + logger.LogError(ex, "Error deleting file {Path}", path); + } + } + + /// + /// Recursively delete empty folders. + /// + /// The fileSystem. + /// The path. + /// The logger. + public static void DeleteEmptyFolders(IFileSystem fileSystem, string path, ILogger logger) + { + foreach (var directory in fileSystem.GetDirectoryPaths(path)) + { + DeleteEmptyFolders(fileSystem, directory, logger); + if (!fileSystem.GetFileSystemEntryPaths(directory).Any()) + { + try + { + Directory.Delete(directory, false); + } + catch (UnauthorizedAccessException ex) + { + logger.LogError(ex, "Error deleting directory {Path}", directory); + } + catch (IOException ex) + { + logger.LogError(ex, "Error deleting directory {Path}", directory); + } + } + } + } +} -- cgit v1.2.3