From 1a5eafd2b16181eace7bef486a9bd4c927ff836c Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 11 Feb 2016 00:38:44 -0800 Subject: [PATCH] New: Remove empty subfolders after renaming FileSetLastWriteTime Closes #490 --- src/NzbDrone.Common/Disk/DiskProviderBase.cs | 14 ++++++++++++++ src/NzbDrone.Common/Disk/IDiskProvider.cs | 1 + .../MediaFiles/RenameEpisodeFileService.cs | 6 ++++++ 3 files changed, 21 insertions(+) diff --git a/src/NzbDrone.Common/Disk/DiskProviderBase.cs b/src/NzbDrone.Common/Disk/DiskProviderBase.cs index 57c9e8016..415e778f9 100644 --- a/src/NzbDrone.Common/Disk/DiskProviderBase.cs +++ b/src/NzbDrone.Common/Disk/DiskProviderBase.cs @@ -418,5 +418,19 @@ namespace NzbDrone.Common.Disk return di.GetFiles().ToList(); } + + public void RemoveEmptySubfolders(string path) + { + var subfolders = GetDirectories(path); + var files = GetFiles(path, SearchOption.AllDirectories); + + foreach (var subfolder in subfolders) + { + if (files.None(f => subfolder.IsParentPath(f))) + { + DeleteFolder(path, false); + } + } + } } } diff --git a/src/NzbDrone.Common/Disk/IDiskProvider.cs b/src/NzbDrone.Common/Disk/IDiskProvider.cs index 002264abc..5ed461fbb 100644 --- a/src/NzbDrone.Common/Disk/IDiskProvider.cs +++ b/src/NzbDrone.Common/Disk/IDiskProvider.cs @@ -47,5 +47,6 @@ namespace NzbDrone.Common.Disk IMount GetMount(string path); List GetDirectoryInfos(string path); List GetFileInfos(string path); + void RemoveEmptySubfolders(string path); } } diff --git a/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs b/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs index 5f6cb6709..95806f579 100644 --- a/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs +++ b/src/NzbDrone.Core/MediaFiles/RenameEpisodeFileService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using NLog; +using NzbDrone.Common.Disk; using NzbDrone.Common.Extensions; using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Core.MediaFiles.Commands; @@ -30,6 +31,7 @@ namespace NzbDrone.Core.MediaFiles private readonly IEventAggregator _eventAggregator; private readonly IEpisodeService _episodeService; private readonly IBuildFileNames _filenameBuilder; + private readonly IDiskProvider _diskProvider; private readonly Logger _logger; public RenameEpisodeFileService(ISeriesService seriesService, @@ -38,6 +40,7 @@ namespace NzbDrone.Core.MediaFiles IEventAggregator eventAggregator, IEpisodeService episodeService, IBuildFileNames filenameBuilder, + IDiskProvider diskProvider, Logger logger) { _seriesService = seriesService; @@ -46,6 +49,7 @@ namespace NzbDrone.Core.MediaFiles _eventAggregator = eventAggregator; _episodeService = episodeService; _filenameBuilder = filenameBuilder; + _diskProvider = diskProvider; _logger = logger; } @@ -134,6 +138,8 @@ namespace NzbDrone.Core.MediaFiles if (renamed.Any()) { + _diskProvider.RemoveEmptySubfolders(series.Path); + _eventAggregator.PublishEvent(new SeriesRenamedEvent(series)); } }