using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.Extras.Files { public interface IExtraFileRepository : IBasicRepository where TExtraFile : ExtraFile, new() { void DeleteForArtists(List artistIds); void DeleteForAlbum(int artistId, int albumId); void DeleteForTrackFile(int trackFileId); List GetFilesByArtist(int artistId); List GetFilesByAlbum(int artistId, int albumId); List GetFilesByTrackFile(int trackFileId); TExtraFile FindByPath(int artistId, string path); } public class ExtraFileRepository : BasicRepository, IExtraFileRepository where TExtraFile : ExtraFile, new() { public ExtraFileRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } public void DeleteForArtists(List artistIds) { Delete(c => artistIds.Contains(c.ArtistId)); } public void DeleteForAlbum(int artistId, int albumId) { Delete(c => c.ArtistId == artistId && c.AlbumId == albumId); } public void DeleteForTrackFile(int trackFileId) { Delete(c => c.TrackFileId == trackFileId); } public List GetFilesByArtist(int artistId) { return Query(c => c.ArtistId == artistId); } public List GetFilesByAlbum(int artistId, int albumId) { return Query(c => c.ArtistId == artistId && c.AlbumId == albumId); } public List GetFilesByTrackFile(int trackFileId) { return Query(c => c.TrackFileId == trackFileId); } public TExtraFile FindByPath(int artistId, string path) { return Query(c => c.ArtistId == artistId && c.RelativePath == path).SingleOrDefault(); } } }