using System.Collections.Generic; using Equ; using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaFiles; namespace NzbDrone.Core.Music { public class Track : Entity { public Track() { OldForeignTrackIds = new List(); OldForeignRecordingIds = new List(); Ratings = new Ratings(); } // These are model fields public string ForeignTrackId { get; set; } public List OldForeignTrackIds { get; set; } public string ForeignRecordingId { get; set; } public List OldForeignRecordingIds { get; set; } public int AlbumReleaseId { get; set; } public int ArtistMetadataId { get; set; } public string TrackNumber { get; set; } public int AbsoluteTrackNumber { get; set; } public string Title { get; set; } public int Duration { get; set; } public bool Explicit { get; set; } public Ratings Ratings { get; set; } public int MediumNumber { get; set; } public int TrackFileId { get; set; } public bool IsSingleFileRelease { get; set; } [MemberwiseEqualityIgnore] public bool HasFile => TrackFileId > 0; // These are dynamically queried from the DB [MemberwiseEqualityIgnore] public LazyLoaded AlbumRelease { get; set; } [MemberwiseEqualityIgnore] public LazyLoaded ArtistMetadata { get; set; } [MemberwiseEqualityIgnore] public LazyLoaded TrackFile { get; set; } [MemberwiseEqualityIgnore] public LazyLoaded Artist { get; set; } // These are retained for compatibility // TODO: Remove set, bodged in because tests expect this to be writable [MemberwiseEqualityIgnore] public int AlbumId { get { return AlbumRelease?.Value?.Album?.Value?.Id ?? 0; } set { /* empty */ } } [MemberwiseEqualityIgnore] public Album Album { get; set; } public override string ToString() { return string.Format("[{0}]{1}", ForeignTrackId, Title.NullSafe()); } public override void UseMetadataFrom(Track other) { ForeignTrackId = other.ForeignTrackId; OldForeignTrackIds = other.OldForeignTrackIds; ForeignRecordingId = other.ForeignRecordingId; OldForeignRecordingIds = other.OldForeignRecordingIds; TrackNumber = other.TrackNumber; AbsoluteTrackNumber = other.AbsoluteTrackNumber; Title = other.Title; Duration = other.Duration; Explicit = other.Explicit; Ratings = other.Ratings; MediumNumber = other.MediumNumber; IsSingleFileRelease = other.IsSingleFileRelease; } public override void UseDbFieldsFrom(Track other) { Id = other.Id; AlbumReleaseId = other.AlbumReleaseId; ArtistMetadataId = other.ArtistMetadataId; TrackFileId = other.TrackFileId; IsSingleFileRelease = other.IsSingleFileRelease; } } }