diff --git a/Kyoo.Common/Models/Genre.cs b/Kyoo.Common/Models/Genre.cs index 550400da..4e6a186f 100644 --- a/Kyoo.Common/Models/Genre.cs +++ b/Kyoo.Common/Models/Genre.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using System.Collections.Generic; +using Newtonsoft.Json; namespace Kyoo.Models { @@ -7,6 +8,8 @@ namespace Kyoo.Models [JsonIgnore] public long ID { get; set; } public string Slug { get; set; } public string Name { get; set; } + + // public IEnumerable Shows { get; set; } public Genre(string slug, string name) { diff --git a/Kyoo.Common/Models/GenreLink.cs b/Kyoo.Common/Models/GenreLink.cs index 405a3847..cb85d01a 100644 --- a/Kyoo.Common/Models/GenreLink.cs +++ b/Kyoo.Common/Models/GenreLink.cs @@ -2,12 +2,17 @@ namespace Kyoo.Models { public class GenreLink { - // TODO Make json serializer ignore this class and only serialize the Genre child. - // TODO include this class in the EF workflows. - public long ShowID { get; set; } public virtual Show Show { get; set; } public long GenreID { get; set; } public virtual Genre Genre { get; set; } + + public GenreLink() {} + + public GenreLink(Show show, Genre genre) + { + Show = show; + Genre = genre; + } } } \ No newline at end of file diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index d766cac6..2f28d73b 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -6,7 +6,12 @@ namespace Kyoo.Models { [JsonIgnore] public long ID { get; set; } [JsonIgnore] public long PeopleID { get; set; } - public virtual People People { get; set; } + [JsonIgnore] public virtual People People { get; set; } + + public string Slug => People.Slug; + public string Name => People.Name; + public string ExternalIDs => People.ExternalIDs; + [JsonIgnore] public long ShowID { get; set; } [JsonIgnore] public virtual Show Show { get; set; } public string Role { get; set; } diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index c1d66680..1cfa9b82 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -29,7 +29,12 @@ namespace Kyoo.Models public bool IsCollection; - public virtual IEnumerable Genres { get; set; } + public virtual IEnumerable Genres + { + get { return GenreLinks?.Select(x => x.Genre); } + set { GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); } + } + [JsonIgnore] public virtual List GenreLinks { get; set; } public virtual Studio Studio { get; set; } public virtual IEnumerable People { get; set; } public virtual IEnumerable Seasons { get; set; } diff --git a/Kyoo.Common/Models/Track.cs b/Kyoo.Common/Models/Track.cs index 2c22bdd1..e03e265a 100644 --- a/Kyoo.Common/Models/Track.cs +++ b/Kyoo.Common/Models/Track.cs @@ -56,7 +56,7 @@ namespace Kyoo.Models public class Track : Stream { - public int ID { get; set; } + [JsonIgnore] public long ID { get; set; } [JsonIgnore] public long EpisodeID { get; set; } public bool IsDefault { @@ -72,7 +72,7 @@ namespace Kyoo.Models public string Link; [JsonIgnore] public bool IsExternal { get; set; } - public virtual Episode Episode { get; set; } + [JsonIgnore] public virtual Episode Episode { get; set; } public Track() { } diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index 4f9a8077..ae8c53af 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -76,14 +76,7 @@ namespace Kyoo.Controllers public Show GetShowBySlug(string slug) { - Show ret = (from show in _database.Shows where show.Slug == slug select show).FirstOrDefault(); - // if (ret == null) - // return null; - //_database.Entry(ret).Collection(x => x.Genres).Load(); - // _database.Entry(ret).Reference(x => x.Studio).Load(); - // _database.Entry(ret).Collection(x => x.People).Load(); - // _database.Entry(ret).Collection(x => x.Seasons).Load(); - return ret; + return (from show in _database.Shows where show.Slug == slug select show).FirstOrDefault(); } public Show GetShow(string path) diff --git a/Kyoo/DatabaseContext.cs b/Kyoo/DatabaseContext.cs index 2ad99f43..2758d758 100644 --- a/Kyoo/DatabaseContext.cs +++ b/Kyoo/DatabaseContext.cs @@ -25,6 +25,10 @@ namespace Kyoo public DbSet CollectionLinks { get; set; } public DbSet PeopleLinks { get; set; } + // This is used because EF doesn't support Many-To-Many relationships so for now we need to override the getter/setters to store this. + public DbSet GenreLinks { get; set; } + + private ValueConverter stringArrayConverter = new ValueConverter( arr => string.Join("|", arr), str => str.Split("|", StringSplitOptions.None)); @@ -48,6 +52,16 @@ namespace Kyoo modelBuilder.Entity() .Property(t => t.IsForced) .ValueGeneratedNever(); + + + modelBuilder.Entity() + .HasKey(x => new {x.ShowID, x.GenreID}); + + modelBuilder.Entity() + .Ignore(x => x.Genres); + + // modelBuilder.Entity() + // .Ignore(x => x.Shows); } } }