using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Runtime.CompilerServices; namespace Jellyfin.Data.Entities { [Table("Track")] public partial class Track : LibraryItem { partial void Init(); /// /// Default constructor. Protected due to required properties, but present because EF needs it. /// protected Track() : base() { // NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem. // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other. Releases = new HashSet(); TrackMetadata = new HashSet(); Init(); } /// /// Replaces default constructor, since it's protected. Caller assumes responsibility for setting all required values before saving. /// public static Track CreateTrackUnsafe() { return new Track(); } /// /// Public constructor with required data /// /// This is whats gets displayed in the Urls and API requests. This could also be a string. /// public Track(Guid urlid, DateTime dateadded, MusicAlbum _musicalbum0) { // NOTE: This class has one-to-one associations with LibraryRoot, LibraryItem and CollectionItem. // One-to-one associations are not validated in constructors since this causes a scenario where each one must be constructed before the other. this.UrlId = urlid; if (_musicalbum0 == null) throw new ArgumentNullException(nameof(_musicalbum0)); _musicalbum0.Tracks.Add(this); this.Releases = new HashSet(); this.TrackMetadata = new HashSet(); Init(); } /// /// Static create function (for use in LINQ queries, etc.) /// /// This is whats gets displayed in the Urls and API requests. This could also be a string. /// public static Track Create(Guid urlid, DateTime dateadded, MusicAlbum _musicalbum0) { return new Track(urlid, dateadded, _musicalbum0); } /************************************************************************* * Properties *************************************************************************/ /// /// Backing field for TrackNumber /// protected int? _TrackNumber; /// /// When provided in a partial class, allows value of TrackNumber to be changed before setting. /// partial void SetTrackNumber(int? oldValue, ref int? newValue); /// /// When provided in a partial class, allows value of TrackNumber to be changed before returning. /// partial void GetTrackNumber(ref int? result); public int? TrackNumber { get { int? value = _TrackNumber; GetTrackNumber(ref value); return (_TrackNumber = value); } set { int? oldValue = _TrackNumber; SetTrackNumber(oldValue, ref value); if (oldValue != value) { _TrackNumber = value; } } } /************************************************************************* * Navigation properties *************************************************************************/ [ForeignKey("Release_Releases_Id")] public virtual ICollection Releases { get; protected set; } [ForeignKey("TrackMetadata_TrackMetadata_Id")] public virtual ICollection TrackMetadata { get; protected set; } } }