2020-04-27 00:18:41 +02:00

134 lines
3.4 KiB
C#

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
namespace Kyoo.Models
{
public class Show : IMergable<Show>
{
[JsonIgnore] public long ID { get; set; }
public string Slug { get; set; }
public string Title { get; set; }
public string[] Aliases { get; set; }
[JsonIgnore] public string Path { get; set; }
public string Overview { get; set; }
public Status? Status { get; set; }
public string TrailerUrl { get; set; }
public long? StartYear { get; set; }
public long? EndYear { get; set; }
public string Poster { get; set; }
public string Logo { get; set; }
public string Backdrop { get; set; }
public virtual IEnumerable<MetadataID> ExternalIDs { get; set; }
public bool IsMovie { get; set; }
public bool IsCollection;
public virtual IEnumerable<Genre> Genres
{
get { return GenreLinks?.Select(x => x.Genre).OrderBy(x => x.Name); }
set { GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); }
}
[JsonIgnore] public virtual IEnumerable<GenreLink> GenreLinks { get; set; }
public virtual Studio Studio { get; set; }
[JsonIgnore] public virtual IEnumerable<PeopleLink> People { get; set; }
[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
[JsonIgnore] public virtual IEnumerable<Episode> Episodes { get; set; }
public Show() { }
public Show(string slug,
string title,
IEnumerable<string> aliases,
string path, string overview,
string trailerUrl,
IEnumerable<Genre> genres,
Status? status,
long? startYear,
long? endYear,
IEnumerable<MetadataID> externalIDs)
{
Slug = slug;
Title = title;
Aliases = aliases?.ToArray();
Path = path;
Overview = overview;
TrailerUrl = trailerUrl;
Genres = genres;
Status = status;
StartYear = startYear;
EndYear = endYear;
ExternalIDs = externalIDs;
IsCollection = false;
}
public Show(string slug,
string title,
IEnumerable<string> aliases,
string path,
string overview,
string trailerUrl,
Status? status,
long? startYear,
long? endYear,
string poster,
string logo,
string backdrop,
IEnumerable<MetadataID> 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;
IsCollection = false;
}
public string GetID(string provider)
{
return ExternalIDs?.FirstOrDefault(x => x.Provider.Name == provider)?.DataID;
}
public Show Merge(Show other)
{
if (other == null)
return this;
if (ID == -1)
ID = other.ID;
Slug ??= other.Slug;
Title ??= other.Title;
Aliases = Utility.MergeLists(Aliases, other.Aliases).ToArray();
Genres = Utility.MergeLists(Genres, other.Genres,
(x, y) => x.Slug == y.Slug);
Path ??= other.Path;
Overview ??= other.Overview;
TrailerUrl ??= other.TrailerUrl;
Status ??= other.Status;
StartYear ??= other.StartYear;
EndYear ??= other.EndYear;
Poster ??= other.Poster;
Logo ??= other.Logo;
Backdrop ??= other.Backdrop;
Studio ??= other.Studio;
ExternalIDs = Utility.MergeLists(ExternalIDs, other.ExternalIDs,
(x, y) => x.Provider.Name == y.Provider.Name);
return this;
}
}
public enum Status { Finished, Airing, Planned }
}