From 6003ca1696adde0dafb695e383007d17e274fa73 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 2 Apr 2024 20:59:08 -0700 Subject: [PATCH] Fixed: Deleted episodes not being unmonitored when series folder has been deleted Closes #6678 --- .../MediaFiles/DiskScanService.cs | 12 +++++-- .../MediaFiles/MediaFileDeletionService.cs | 34 ++++++++++--------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index 999d4d067..f7d878f16 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -174,10 +174,16 @@ namespace NzbDrone.Core.MediaFiles fileInfoStopwatch.Stop(); _logger.Trace("Reprocessing existing files complete for: {0} [{1}]", series, decisionsStopwatch.Elapsed); - var filesOnDisk = GetNonVideoFiles(series.Path); - var possibleExtraFiles = FilterPaths(series.Path, filesOnDisk); - RemoveEmptySeriesFolder(series.Path); + + var possibleExtraFiles = new List(); + + if (_diskProvider.FolderExists(series.Path)) + { + var extraFiles = GetNonVideoFiles(series.Path); + possibleExtraFiles = FilterPaths(series.Path, extraFiles); + } + CompletedScanning(series, possibleExtraFiles); } diff --git a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs index 064f15157..bd8d66025 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs @@ -129,28 +129,30 @@ namespace NzbDrone.Core.MediaFiles [EventHandleOrder(EventHandleOrder.Last)] public void Handle(EpisodeFileDeletedEvent message) { - if (_configService.DeleteEmptyFolders) + if (!_configService.DeleteEmptyFolders || message.Reason == DeleteMediaFileReason.MissingFromDisk) { - var series = message.EpisodeFile.Series.Value; - var seriesPath = series.Path; - var folder = message.EpisodeFile.Path.GetParentPath(); + return; + } - while (seriesPath.IsParentPath(folder)) + var series = message.EpisodeFile.Series.Value; + var seriesPath = series.Path; + var folder = message.EpisodeFile.Path.GetParentPath(); + + while (seriesPath.IsParentPath(folder)) + { + if (_diskProvider.FolderExists(folder)) { - if (_diskProvider.FolderExists(folder)) - { - _diskProvider.RemoveEmptySubfolders(folder); - } - - folder = folder.GetParentPath(); + _diskProvider.RemoveEmptySubfolders(folder); } - _diskProvider.RemoveEmptySubfolders(seriesPath); + folder = folder.GetParentPath(); + } - if (_diskProvider.FolderEmpty(seriesPath)) - { - _diskProvider.DeleteFolder(seriesPath, true); - } + _diskProvider.RemoveEmptySubfolders(seriesPath); + + if (_diskProvider.FolderEmpty(seriesPath)) + { + _diskProvider.DeleteFolder(seriesPath, true); } } }