using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Music.Events; namespace NzbDrone.Core.Music { public interface IReleaseService { AlbumRelease GetRelease(int id); AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false); List GetAllReleases(); void InsertMany(List releases); void UpdateMany(List releases); void DeleteMany(List releases); List GetReleasesForRefresh(int albumId, IEnumerable foreignReleaseIds); List GetReleasesByAlbum(int releaseGroupId); List GetReleasesByRecordingIds(List recordingIds); List SetMonitored(AlbumRelease release); } public class ReleaseService : IReleaseService, IHandle { private readonly IReleaseRepository _releaseRepository; private readonly IEventAggregator _eventAggregator; public ReleaseService(IReleaseRepository releaseRepository, IEventAggregator eventAggregator) { _releaseRepository = releaseRepository; _eventAggregator = eventAggregator; } public AlbumRelease GetRelease(int id) { return _releaseRepository.Get(id); } public AlbumRelease GetReleaseByForeignReleaseId(string foreignReleaseId, bool checkRedirect = false) { return _releaseRepository.FindByForeignReleaseId(foreignReleaseId, checkRedirect); } public List GetAllReleases() { return _releaseRepository.All().ToList(); } public void InsertMany(List releases) { _releaseRepository.InsertMany(releases); } public void UpdateMany(List releases) { _releaseRepository.UpdateMany(releases); } public void DeleteMany(List releases) { _releaseRepository.DeleteMany(releases); foreach (var release in releases) { _eventAggregator.PublishEvent(new ReleaseDeletedEvent(release)); } } public List GetReleasesForRefresh(int albumId, IEnumerable foreignReleaseIds) { return _releaseRepository.GetReleasesForRefresh(albumId, foreignReleaseIds); } public List GetReleasesByAlbum(int releaseGroupId) { return _releaseRepository.FindByAlbum(releaseGroupId); } public List GetReleasesByRecordingIds(List recordingIds) { return _releaseRepository.FindByRecordingId(recordingIds); } public List SetMonitored(AlbumRelease release) { return _releaseRepository.SetMonitored(release); } public void Handle(AlbumDeletedEvent message) { var releases = GetReleasesByAlbum(message.Album.Id); DeleteMany(releases); } } }