You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.2 KiB
138 lines
4.2 KiB
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using NLog;
|
|
using NzbDrone.Core.MediaFiles.Events;
|
|
using NzbDrone.Core.Messaging.Events;
|
|
using NzbDrone.Core.Music.Events;
|
|
|
|
namespace NzbDrone.Core.Music
|
|
{
|
|
public interface ITrackService
|
|
{
|
|
Track GetTrack(int id);
|
|
List<Track> GetTracks(IEnumerable<int> ids);
|
|
List<Track> GetTracksByArtist(int artistId);
|
|
List<Track> GetTracksByAlbum(int albumId);
|
|
List<Track> GetTracksByRelease(int albumReleaseId);
|
|
List<Track> GetTracksByReleases(List<int> albumReleaseIds);
|
|
List<Track> GetTracksForRefresh(int albumReleaseId, List<string> foreignTrackIds);
|
|
List<Track> TracksWithFiles(int artistId);
|
|
List<Track> TracksWithoutFiles(int albumId);
|
|
List<Track> GetTracksByFileId(int trackFileId);
|
|
List<Track> GetTracksByFileId(IEnumerable<int> trackFileIds);
|
|
void UpdateTrack(Track track);
|
|
void InsertMany(List<Track> tracks);
|
|
void UpdateMany(List<Track> tracks);
|
|
void DeleteMany(List<Track> tracks);
|
|
void SetFileIds(List<Track> tracks);
|
|
}
|
|
|
|
public class TrackService : ITrackService,
|
|
IHandle<ReleaseDeletedEvent>,
|
|
IHandle<TrackFileDeletedEvent>
|
|
{
|
|
private readonly ITrackRepository _trackRepository;
|
|
private readonly Logger _logger;
|
|
|
|
public TrackService(ITrackRepository trackRepository,
|
|
Logger logger)
|
|
{
|
|
_trackRepository = trackRepository;
|
|
_logger = logger;
|
|
}
|
|
|
|
public Track GetTrack(int id)
|
|
{
|
|
return _trackRepository.Get(id);
|
|
}
|
|
|
|
public List<Track> GetTracks(IEnumerable<int> ids)
|
|
{
|
|
return _trackRepository.Get(ids).ToList();
|
|
}
|
|
|
|
public List<Track> GetTracksByArtist(int artistId)
|
|
{
|
|
_logger.Debug("Getting Tracks for ArtistId {0}", artistId);
|
|
return _trackRepository.GetTracks(artistId).ToList();
|
|
}
|
|
|
|
public List<Track> GetTracksByAlbum(int albumId)
|
|
{
|
|
return _trackRepository.GetTracksByAlbum(albumId);
|
|
}
|
|
|
|
public List<Track> GetTracksByRelease(int albumReleaseId)
|
|
{
|
|
return _trackRepository.GetTracksByRelease(albumReleaseId);
|
|
}
|
|
|
|
public List<Track> GetTracksByReleases(List<int> albumReleaseIds)
|
|
{
|
|
return _trackRepository.GetTracksByReleases(albumReleaseIds);
|
|
}
|
|
|
|
public List<Track> GetTracksForRefresh(int albumReleaseId, List<string> foreignTrackIds)
|
|
{
|
|
return _trackRepository.GetTracksForRefresh(albumReleaseId, foreignTrackIds);
|
|
}
|
|
|
|
public List<Track> TracksWithFiles(int artistId)
|
|
{
|
|
return _trackRepository.TracksWithFiles(artistId);
|
|
}
|
|
|
|
public List<Track> TracksWithoutFiles(int albumId)
|
|
{
|
|
return _trackRepository.TracksWithoutFiles(albumId);
|
|
}
|
|
|
|
public List<Track> GetTracksByFileId(int trackFileId)
|
|
{
|
|
return _trackRepository.GetTracksByFileId(trackFileId);
|
|
}
|
|
|
|
public List<Track> GetTracksByFileId(IEnumerable<int> trackFileIds)
|
|
{
|
|
return _trackRepository.GetTracksByFileId(trackFileIds);
|
|
}
|
|
|
|
public void UpdateTrack(Track track)
|
|
{
|
|
_trackRepository.Update(track);
|
|
}
|
|
|
|
public void InsertMany(List<Track> tracks)
|
|
{
|
|
_trackRepository.InsertMany(tracks);
|
|
}
|
|
|
|
public void UpdateMany(List<Track> tracks)
|
|
{
|
|
_trackRepository.UpdateMany(tracks);
|
|
}
|
|
|
|
public void DeleteMany(List<Track> tracks)
|
|
{
|
|
_trackRepository.DeleteMany(tracks);
|
|
}
|
|
|
|
public void SetFileIds(List<Track> tracks)
|
|
{
|
|
_trackRepository.SetFileId(tracks);
|
|
}
|
|
|
|
public void Handle(ReleaseDeletedEvent message)
|
|
{
|
|
var tracks = GetTracksByRelease(message.Release.Id);
|
|
_trackRepository.DeleteMany(tracks);
|
|
}
|
|
|
|
public void Handle(TrackFileDeletedEvent message)
|
|
{
|
|
_logger.Debug($"Detaching tracks from file {message.TrackFile}");
|
|
_trackRepository.DetachTrackFile(message.TrackFile.Id);
|
|
}
|
|
}
|
|
}
|