From 6060270f1424fa3105a3f90bbc708af11b4f25f3 Mon Sep 17 00:00:00 2001 From: Qstick Date: Wed, 1 Jan 2020 13:17:00 -0500 Subject: [PATCH] Fixed: Properly clean history on Album and Track Delete --- src/NzbDrone.Core/History/HistoryRepository.cs | 12 ++++++++++++ src/NzbDrone.Core/History/HistoryService.cs | 14 +++++++++++++- .../Music/Events/TrackDeletedEvent.cs | 14 ++++++++++++++ src/NzbDrone.Core/Music/Services/TrackService.cs | 7 +++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core/Music/Events/TrackDeletedEvent.cs diff --git a/src/NzbDrone.Core/History/HistoryRepository.cs b/src/NzbDrone.Core/History/HistoryRepository.cs index e21efec4f..4c17175f2 100644 --- a/src/NzbDrone.Core/History/HistoryRepository.cs +++ b/src/NzbDrone.Core/History/HistoryRepository.cs @@ -18,6 +18,8 @@ namespace NzbDrone.Core.History List GetByAlbum(int albumId, HistoryEventType? eventType); List FindDownloadHistory(int idArtistId, QualityModel quality); void DeleteForArtist(int artistId); + void DeleteForAlbum(int albumId); + void DeleteForTrack(int trackId); List Since(DateTime date, HistoryEventType? eventType); } @@ -97,6 +99,16 @@ namespace NzbDrone.Core.History Delete(c => c.ArtistId == artistId); } + public void DeleteForAlbum(int albumId) + { + Delete(c => c.AlbumId == albumId); + } + + public void DeleteForTrack(int trackId) + { + Delete(c => c.TrackId == trackId); + } + protected override SortBuilder GetPagedQuery(QueryBuilder query, PagingSpec pagingSpec) { var baseQuery = query.Join(JoinType.Inner, h => h.Artist, (h, a) => h.ArtistId == a.Id) diff --git a/src/NzbDrone.Core/History/HistoryService.cs b/src/NzbDrone.Core/History/HistoryService.cs index 7decd0d49..21ea8798c 100644 --- a/src/NzbDrone.Core/History/HistoryService.cs +++ b/src/NzbDrone.Core/History/HistoryService.cs @@ -39,7 +39,9 @@ namespace NzbDrone.Core.History IHandle, IHandle, IHandle, - IHandle + IHandle, + IHandle, + IHandle { private readonly IHistoryRepository _historyRepository; private readonly Logger _logger; @@ -372,6 +374,16 @@ namespace NzbDrone.Core.History _historyRepository.DeleteForArtist(message.Artist.Id); } + public void Handle(AlbumDeletedEvent message) + { + _historyRepository.DeleteForAlbum(message.Album.Id); + } + + public void Handle(TrackDeletedEvent message) + { + _historyRepository.DeleteForTrack(message.Track.Id); + } + public List Since(DateTime date, HistoryEventType? eventType) { return _historyRepository.Since(date, eventType); diff --git a/src/NzbDrone.Core/Music/Events/TrackDeletedEvent.cs b/src/NzbDrone.Core/Music/Events/TrackDeletedEvent.cs new file mode 100644 index 000000000..bb84055c6 --- /dev/null +++ b/src/NzbDrone.Core/Music/Events/TrackDeletedEvent.cs @@ -0,0 +1,14 @@ +using NzbDrone.Common.Messaging; + +namespace NzbDrone.Core.Music.Events +{ + public class TrackDeletedEvent : IEvent + { + public Track Track { get; private set; } + + public TrackDeletedEvent(Track track) + { + Track = track; + } + } +} diff --git a/src/NzbDrone.Core/Music/Services/TrackService.cs b/src/NzbDrone.Core/Music/Services/TrackService.cs index a7f33384f..cee5c10be 100644 --- a/src/NzbDrone.Core/Music/Services/TrackService.cs +++ b/src/NzbDrone.Core/Music/Services/TrackService.cs @@ -32,12 +32,15 @@ namespace NzbDrone.Core.Music IHandle { private readonly ITrackRepository _trackRepository; + private readonly IEventAggregator _eventAggregator; private readonly Logger _logger; public TrackService(ITrackRepository trackRepository, + IEventAggregator eventAggregator, Logger logger) { _trackRepository = trackRepository; + _eventAggregator = eventAggregator; _logger = logger; } @@ -115,6 +118,10 @@ namespace NzbDrone.Core.Music public void DeleteMany(List tracks) { _trackRepository.DeleteMany(tracks); + foreach (var track in tracks) + { + _eventAggregator.PublishEvent(new TrackDeletedEvent(track)); + } } public void SetFileIds(List tracks)