diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 87e62f72..0fcacc47 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -9,7 +9,7 @@ namespace Kyoo.Controllers //Read values string GetShowExternalIDs(long showID); Studio GetStudio(long showID); - IEnumerable GetPeople(long showID); + IEnumerable GetPeople(long showID); IEnumerable GetGenreForShow(long showID); IEnumerable GetSeasons(long showID); int GetSeasonCount(string showSlug, long seasonNumber); diff --git a/Kyoo.Common/Controllers/IMetadataProvider.cs b/Kyoo.Common/Controllers/IMetadataProvider.cs index 0813418c..3743a5e2 100644 --- a/Kyoo.Common/Controllers/IMetadataProvider.cs +++ b/Kyoo.Common/Controllers/IMetadataProvider.cs @@ -14,7 +14,7 @@ namespace Kyoo.Controllers //For the show Task GetShowByID(string id); Task GetShowFromName(string showName); - Task> GetPeople(Show show); + Task> GetPeople(Show show); //For the seasons Task GetSeason(Show show, long seasonNumber); diff --git a/Kyoo.Common/Controllers/IProviderManager.cs b/Kyoo.Common/Controllers/IProviderManager.cs index d3eac31c..63f5b09c 100644 --- a/Kyoo.Common/Controllers/IProviderManager.cs +++ b/Kyoo.Common/Controllers/IProviderManager.cs @@ -10,6 +10,6 @@ namespace Kyoo.Controllers Task GetShowFromName(string showName, string showPath, Library library); Task GetSeason(Show show, long seasonNumber, Library library); Task GetEpisode(Show show, string episodePath, long seasonNumber, long episodeNumber, long absoluteNumber, Library library); - Task> GetPeople(Show show, Library library); + Task> GetPeople(Show show, Library library); } } \ No newline at end of file diff --git a/Kyoo.Common/Controllers/IThumbnailsManager.cs b/Kyoo.Common/Controllers/IThumbnailsManager.cs index b45c06bd..2ea57b02 100644 --- a/Kyoo.Common/Controllers/IThumbnailsManager.cs +++ b/Kyoo.Common/Controllers/IThumbnailsManager.cs @@ -7,7 +7,7 @@ namespace Kyoo.Controllers public interface IThumbnailsManager { Task Validate(Show show); - Task> Validate(IEnumerable actors); + Task> Validate(List actors); Task Validate(Episode episode); } } diff --git a/Kyoo.Common/Kyoo.Common.csproj b/Kyoo.Common/Kyoo.Common.csproj index b3e73538..59e671a5 100644 --- a/Kyoo.Common/Kyoo.Common.csproj +++ b/Kyoo.Common/Kyoo.Common.csproj @@ -11,7 +11,7 @@ SDG GPL-3.0-or-later true - 1.0.7 + 1.0.9 diff --git a/Kyoo.Common/Models/People.cs b/Kyoo.Common/Models/People.cs index fdceab5d..05848eaf 100644 --- a/Kyoo.Common/Models/People.cs +++ b/Kyoo.Common/Models/People.cs @@ -8,12 +8,10 @@ namespace Kyoo.Models [JsonIgnore] public long ID { get; set; } public string Slug { get; set; } public string Name { get; set; } - public string Role; - public string Type; [JsonIgnore] public string ImgPrimary { get; set; } public string ExternalIDs { get; set; } - public virtual IEnumerable Roles { get; set; } + [JsonIgnore] public virtual IEnumerable Roles { get; set; } public People() {} @@ -25,36 +23,6 @@ namespace Kyoo.Models ExternalIDs = externalIDs; } - public People(string slug, string name, string role, string type, string imgPrimary, string externalIDs) - { - Slug = slug; - Name = name; - Role = role; - Type = type; - ImgPrimary = imgPrimary; - ExternalIDs = externalIDs; - } - - public People SetRoleType(string role, string type) - { - Role = role; - Type = type; - return this; - } - - public PeopleLink ToLink(Show show) - { - return new PeopleLink - { - People = this, - PeopleID = ID, - Role = Role, - Type = Type, - Show = show, - ShowID = show.ID - }; - } - public People Merge(People other) { if (other == null) @@ -65,10 +33,6 @@ namespace Kyoo.Models Slug = other.Slug; if (Name == null) Name = other.Name; - if (Role == null) - Role = other.Role; - if (Type == null) - Type = other.Type; if (ImgPrimary == null) ImgPrimary = other.ImgPrimary; ExternalIDs += '|' + other.ExternalIDs; diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index 3729115c..54e5db4c 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -1,13 +1,31 @@ +using Newtonsoft.Json; + namespace Kyoo.Models { public class PeopleLink { - public long ID { get; set; } - public long PeopleID { get; set; } + [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public long PeopleID { get; set; } public People People { get; set; } - public long ShowID { get; set; } - public Show Show { get; set; } + [JsonIgnore] public long ShowID { get; set; } + [JsonIgnore] public Show Show { get; set; } public string Role { get; set; } public string Type { get; set; } + + public PeopleLink() {} + + public PeopleLink(People people, string role, string type) + { + People = people; + Role = role; + Type = type; + } + + public PeopleLink(string slug, string name, string role, string type, string imgPrimary, string externalIDs) + { + People = new People(slug, name, imgPrimary, externalIDs); + Role = role; + Type = type; + } } } \ No newline at end of file diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index cbe40818..c1d66680 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -29,10 +29,10 @@ namespace Kyoo.Models public bool IsCollection; - public IEnumerable Genres; + public virtual IEnumerable Genres { get; set; } public virtual Studio Studio { get; set; } - [JsonIgnore] public virtual IEnumerable People { get; set; } - [JsonIgnore] public virtual IEnumerable Seasons { get; set; } + public virtual IEnumerable People { get; set; } + public virtual IEnumerable Seasons { get; set; } [JsonIgnore] public virtual IEnumerable Episodes { get; set; } diff --git a/Kyoo/ClientApp b/Kyoo/ClientApp index d18cfcbc..1a709497 160000 --- a/Kyoo/ClientApp +++ b/Kyoo/ClientApp @@ -1 +1 @@ -Subproject commit d18cfcbc3b2b3b309d5d90aee673c9146aa55faa +Subproject commit 1a7094979c79dd3e50760afbc6bf5b2286e7ab9d diff --git a/Kyoo/Controllers/Crawler.cs b/Kyoo/Controllers/Crawler.cs index 338715a9..7925bde6 100644 --- a/Kyoo/Controllers/Crawler.cs +++ b/Kyoo/Controllers/Crawler.cs @@ -141,7 +141,7 @@ namespace Kyoo.Controllers if (show != null) return show; show = await _metadataProvider.GetShowFromName(showTitle, showPath, library); - show.People = (from people in await _metadataProvider.GetPeople(show, library) select people.ToLink(show)).ToList(); + show.People = (from people in await _metadataProvider.GetPeople(show, library) select people).ToList(); return show; } diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index 3eea207b..431d5936 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -76,7 +76,14 @@ namespace Kyoo.Controllers public Show GetShowBySlug(string slug) { - return (from show in _database.Shows where show.Slug == slug select show).FirstOrDefault(); + 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; } public Show GetShow(string path) @@ -157,9 +164,9 @@ namespace Kyoo.Controllers return item; } - public IEnumerable GetPeople(long showID) + public IEnumerable GetPeople(long showID) { - return from link in _database.PeopleLinks where link.ShowID == showID select link.People.SetRoleType(link.Role, link.Type); + return from link in _database.PeopleLinks where link.ShowID == showID select link; } public People GetPeopleBySlug(string slug) diff --git a/Kyoo/Controllers/ProviderManager.cs b/Kyoo/Controllers/ProviderManager.cs index 911b0241..c6462c87 100644 --- a/Kyoo/Controllers/ProviderManager.cs +++ b/Kyoo/Controllers/ProviderManager.cs @@ -90,10 +90,10 @@ namespace Kyoo.Controllers return episode; } - public async Task> GetPeople(Show show, Library library) + public async Task> GetPeople(Show show, Library library) { - IEnumerable people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data"); - people = await _thumbnailsManager.Validate(people); + IEnumerable people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data"); + people = await _thumbnailsManager.Validate(people.ToList()); return people; } } diff --git a/Kyoo/Controllers/ThumbnailsManager.cs b/Kyoo/Controllers/ThumbnailsManager.cs index 2c0a4c5a..c1d255c8 100644 --- a/Kyoo/Controllers/ThumbnailsManager.cs +++ b/Kyoo/Controllers/ThumbnailsManager.cs @@ -68,22 +68,22 @@ namespace Kyoo.Controllers return show; } - public async Task> Validate(IEnumerable people) + public async Task> Validate(List people) { if (people == null) return null; - foreach (People peop in people) + foreach (PeopleLink peop in people) { string root = _config.GetValue("peoplePath"); Directory.CreateDirectory(root); - string localThumb = root + "/" + peop.Slug + ".jpg"; - if (peop.ImgPrimary == null || File.Exists(localThumb)) + string localThumb = root + "/" + peop.People.Slug + ".jpg"; + if (peop.People.ImgPrimary == null || File.Exists(localThumb)) continue; try { using WebClient client = new WebClient(); - await client.DownloadFileTaskAsync(new Uri(peop.ImgPrimary), localThumb); + await client.DownloadFileTaskAsync(new Uri(peop.People.ImgPrimary), localThumb); } catch (WebException) { diff --git a/Kyoo/Startup.cs b/Kyoo/Startup.cs index e8b16f05..29414f2b 100644 --- a/Kyoo/Startup.cs +++ b/Kyoo/Startup.cs @@ -43,7 +43,7 @@ namespace Kyoo services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); + services.AddScoped(); services.AddSingleton(); }