using System; using System.Collections.Generic; using System.IO; using System.Linq; using NzbDrone.Core.MediaFiles.TrackImport.Identification; using NzbDrone.Core.Music; namespace NzbDrone.Core.Parser.Model { public class LocalAlbumRelease { public LocalAlbumRelease() { LocalTracks = new List(); // A dummy distance, will be replaced Distance = new Distance(); Distance.Add("album_id", 1.0); } public LocalAlbumRelease(List tracks) { LocalTracks = tracks; // A dummy distance, will be replaced Distance = new Distance(); Distance.Add("album_id", 1.0); } public List LocalTracks { get; set; } public int TrackCount => LocalTracks.Count; public TrackMapping TrackMapping { get; set; } public Distance Distance { get; set; } public AlbumRelease AlbumRelease { get; set; } public List ExistingTracks { get; set; } public bool NewDownload { get; set; } public void PopulateMatch() { if (AlbumRelease != null) { LocalTracks = LocalTracks.Concat(ExistingTracks).DistinctBy(x => x.Path).ToList(); foreach (var localTrack in LocalTracks) { localTrack.Release = AlbumRelease; localTrack.Album = AlbumRelease.Album.Value; localTrack.Artist = localTrack.Album.Artist.Value; if (TrackMapping.Mapping.ContainsKey(localTrack)) { var track = TrackMapping.Mapping[localTrack].Item1; localTrack.Tracks = new List { track }; localTrack.Distance = TrackMapping.Mapping[localTrack].Item2; } } } } public override string ToString() { return "[" + string.Join(", ", LocalTracks.Select(x => Path.GetDirectoryName(x.Path)).Distinct()) + "]"; } } public class TrackMapping { public TrackMapping() { Mapping = new Dictionary>(); } public Dictionary> Mapping { get; set; } public List LocalExtra { get; set; } public List MBExtra { get; set; } } }