Track Parsing Code (#10)

* We now have the ability to import local tracks into Lidarr. Switching to IDv3 tag reading over custom parsing for local tracks.

* Stable code for track refresh.

* RefreshArtist and RescanArtist events are working correctly. Need to add potential rejection decisions in future.

* Implemented code comments

* PR comments and fixing some odd db bugs.

* Fix some conflicts after Unit Test PR Merge

Fix some conflicts after Unit Test PR Merge

* Track/Album Add and Update Fixes

Track/Album Add and Update Fixes

* Fixed an issue with trackimport looking up trackId instead of artistId

* Add Handle to TrackService for TrackAddedEvent

Add Handle to TrackService for TrackAddedEvent

* Update Quality Regex, Store BitRateMode in TrackFile

Update Quality Regex, Store BitRateMode in TrackFile
This commit is contained in:
Joseph Milazzo
2017-07-03 13:39:06 -05:00
committed by GitHub
parent 4cfd39f7fe
commit ef4da4ac9f
99 changed files with 838 additions and 1023 deletions
+12 -8
View File
@@ -17,12 +17,14 @@ namespace NzbDrone.Core.Music
public class RefreshTrackService : IRefreshTrackService
{
private readonly ITrackService _trackService;
private readonly IAlbumService _albumService;
private readonly IEventAggregator _eventAggregator;
private readonly Logger _logger;
public RefreshTrackService(ITrackService trackService, IEventAggregator eventAggregator, Logger logger)
public RefreshTrackService(ITrackService trackService, IAlbumService albumService, IEventAggregator eventAggregator, Logger logger)
{
_trackService = trackService;
_albumService = albumService;
_eventAggregator = eventAggregator;
_logger = logger;
}
@@ -33,11 +35,13 @@ namespace NzbDrone.Core.Music
var successCount = 0;
var failCount = 0;
var existingTracks = _trackService.GetTracksByAlbum(album.ArtistId, album.Id); // TODO: JOE: I believe this should be string, string
album = _albumService.FindById(album.ForeignAlbumId);
var existingTracks = _trackService.GetTracksByAlbum(album.ArtistId, album.Id);
var updateList = new List<Track>();
var newList = new List<Track>();
var dupeFreeRemoteTracks = remoteTracks.DistinctBy(m => new { m.AlbumId, m.TrackNumber }).ToList();
var dupeFreeRemoteTracks = remoteTracks.DistinctBy(m => new { m.ForeignTrackId, m.TrackNumber }).ToList();
foreach (var track in OrderTracks(album, dupeFreeRemoteTracks))
{
@@ -54,21 +58,20 @@ namespace NzbDrone.Core.Music
{
trackToUpdate = new Track();
trackToUpdate.Monitored = album.Monitored;
trackToUpdate.Id = track.Id;
newList.Add(trackToUpdate);
}
// TODO: Use object mapper to automatically handle this
trackToUpdate.ForeignTrackId = track.ForeignTrackId;
trackToUpdate.TrackNumber = track.TrackNumber;
trackToUpdate.Title = track.Title ?? "Unknown";
trackToUpdate.AlbumId = album.Id;
trackToUpdate.Album = track.Album;
trackToUpdate.Album = track.Album ?? album;
trackToUpdate.Explicit = track.Explicit;
trackToUpdate.ArtistId = album.ArtistId;
trackToUpdate.Compilation = track.Compilation;
// TODO: Implement rest of [RefreshTrackService] fields
successCount++;
}
@@ -118,7 +121,8 @@ namespace NzbDrone.Core.Music
private Track GetTrackToUpdate(Album album, Track track, List<Track> existingTracks)
{
return existingTracks.FirstOrDefault(e => e.AlbumId == track.AlbumId && e.TrackNumber == track.TrackNumber);
var result = existingTracks.FirstOrDefault(e => e.ForeignTrackId == track.ForeignTrackId && e.TrackNumber == track.TrackNumber);
return result;
}
private IEnumerable<Track> OrderTracks(Album album, List<Track> tracks)