using System.Collections.Generic; using System.Linq; using Kyoo.Models.Attributes; namespace Kyoo.Models { public class Show : IResource, IOnMerge { public int ID { get; set; } public string Slug { get; set; } public string Title { get; set; } [EditableRelation] public string[] Aliases { get; set; } [SerializeIgnore] public string Path { get; set; } public string Overview { get; set; } public Status? Status { get; set; } public string TrailerUrl { get; set; } public int? StartYear { get; set; } public int? EndYear { get; set; } public string Poster { get; set; } public string Logo { get; set; } public string Backdrop { get; set; } public bool IsMovie { get; set; } [EditableRelation] [LoadableRelation] public virtual ICollection ExternalIDs { get; set; } public int? StudioID { get; set; } [LoadableRelation] [EditableRelation] public virtual Studio Studio { get; set; } [LoadableRelation] [EditableRelation] public virtual ICollection Genres { get; set; } [LoadableRelation] [EditableRelation] public virtual ICollection People { get; set; } [LoadableRelation] public virtual ICollection Seasons { get; set; } [LoadableRelation] public virtual ICollection Episodes { get; set; } [LoadableRelation] public virtual ICollection Libraries { get; set; } [LoadableRelation] public virtual ICollection Collections { get; set; } #if ENABLE_INTERNAL_LINKS [SerializeIgnore] public virtual ICollection> LibraryLinks { get; set; } [SerializeIgnore] public virtual ICollection> CollectionLinks { get; set; } [SerializeIgnore] public virtual ICollection> GenreLinks { get; set; } #endif public Show() { } public Show(string slug, string title, IEnumerable aliases, string path, string overview, string trailerUrl, IEnumerable genres, Status? status, int? startYear, int? endYear, IEnumerable externalIDs) { Slug = slug; Title = title; Aliases = aliases?.ToArray(); Path = path; Overview = overview; TrailerUrl = trailerUrl; Genres = genres?.ToArray(); Status = status; StartYear = startYear; EndYear = endYear; ExternalIDs = externalIDs?.ToArray(); } public Show(string slug, string title, IEnumerable aliases, string path, string overview, string trailerUrl, Status? status, int? startYear, int? endYear, string poster, string logo, string backdrop, IEnumerable externalIDs) { Slug = slug; Title = title; Aliases = aliases?.ToArray(); Path = path; Overview = overview; TrailerUrl = trailerUrl; Status = status; StartYear = startYear; EndYear = endYear; Poster = poster; Logo = logo; Backdrop = backdrop; ExternalIDs = externalIDs?.ToArray(); } public string GetID(string provider) { return ExternalIDs?.FirstOrDefault(x => x.Provider.Name == provider)?.DataID; } public virtual void OnMerge(object merged) { if (ExternalIDs != null) foreach (MetadataID id in ExternalIDs) id.Show = this; if (People != null) foreach (PeopleRole link in People) link.Show = this; if (Seasons != null) foreach (Season season in Seasons) season.Show = this; if (Episodes != null) foreach (Episode episode in Episodes) episode.Show = this; } } public enum Status { Finished, Airing, Planned, Unknown } }