From b230faaa3482ec3be08b9f42dcb0940e5a8eb40c Mon Sep 17 00:00:00 2001 From: Qstick Date: Sun, 15 Jan 2023 00:09:03 -0600 Subject: [PATCH] Fixed: Correctly delete files on Album Delete Fixes #2551 --- .../MediaFiles/MediaFileDeletionService.cs | 18 +++++++++++++++++- .../Music/Events/AlbumDeletedEvent.cs | 5 ++++- .../Music/Services/AlbumService.cs | 14 +++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs index addc10426..582b3dcee 100644 --- a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs +++ b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Net; using NLog; using NzbDrone.Common.Disk; @@ -147,13 +148,28 @@ namespace NzbDrone.Core.MediaFiles { if (message.DeleteFiles) { - var files = _mediaFileService.GetFilesByAlbum(message.Album.Id); + var files = message.TrackFilesToDelete; foreach (var file in files) { _recycleBinProvider.DeleteFile(file.Path); } + if (_configService.DeleteEmptyFolders) + { + var artist = message.Album.Artist.Value; + var albumFolder = message.TrackFilesToDelete.FirstOrDefault()?.Path.GetParentPath(); + + if (_diskProvider.GetFiles(artist.Path, SearchOption.AllDirectories).Empty()) + { + _diskProvider.DeleteFolder(artist.Path, true); + } + else if (_diskProvider.GetFiles(albumFolder, SearchOption.AllDirectories).Empty()) + { + _diskProvider.RemoveEmptySubfolders(albumFolder); + } + } + _eventAggregator.PublishEvent(new DeleteCompletedEvent()); } } diff --git a/src/NzbDrone.Core/Music/Events/AlbumDeletedEvent.cs b/src/NzbDrone.Core/Music/Events/AlbumDeletedEvent.cs index 23c08d8ed..43bb6ff22 100644 --- a/src/NzbDrone.Core/Music/Events/AlbumDeletedEvent.cs +++ b/src/NzbDrone.Core/Music/Events/AlbumDeletedEvent.cs @@ -1,4 +1,6 @@ -using NzbDrone.Common.Messaging; +using System.Collections.Generic; +using NzbDrone.Common.Messaging; +using NzbDrone.Core.MediaFiles; namespace NzbDrone.Core.Music.Events { @@ -7,6 +9,7 @@ namespace NzbDrone.Core.Music.Events public Album Album { get; private set; } public bool DeleteFiles { get; private set; } public bool AddImportListExclusion { get; private set; } + public List TrackFilesToDelete { get; set; } public AlbumDeletedEvent(Album album, bool deleteFiles, bool addImportListExclusion) { diff --git a/src/NzbDrone.Core/Music/Services/AlbumService.cs b/src/NzbDrone.Core/Music/Services/AlbumService.cs index fed437aef..1f1d421fb 100644 --- a/src/NzbDrone.Core/Music/Services/AlbumService.cs +++ b/src/NzbDrone.Core/Music/Services/AlbumService.cs @@ -4,6 +4,7 @@ using System.Linq; using NLog; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore; +using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music.Events; using NzbDrone.Core.Parser; @@ -46,14 +47,17 @@ namespace NzbDrone.Core.Music { private readonly IAlbumRepository _albumRepository; private readonly IEventAggregator _eventAggregator; + private readonly IMediaFileService _mediaFileService; private readonly Logger _logger; public AlbumService(IAlbumRepository albumRepository, IEventAggregator eventAggregator, + IMediaFileService mediaFileService, Logger logger) { _albumRepository = albumRepository; _eventAggregator = eventAggregator; + _mediaFileService = mediaFileService; _logger = logger; } @@ -71,7 +75,15 @@ namespace NzbDrone.Core.Music var album = _albumRepository.Get(albumId); album.Artist.LazyLoad(); _albumRepository.Delete(albumId); - _eventAggregator.PublishEvent(new AlbumDeletedEvent(album, deleteFiles, addImportListExclusion)); + + var deleteEvent = new AlbumDeletedEvent(album, deleteFiles, addImportListExclusion); + + if (deleteFiles) + { + deleteEvent.TrackFilesToDelete = _mediaFileService.GetFilesByAlbum(albumId); + } + + _eventAggregator.PublishEvent(deleteEvent); } public Album FindById(string foreignId)