diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 0fcacc47..a3fb63a1 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -15,7 +15,7 @@ namespace Kyoo.Controllers int GetSeasonCount(string showSlug, long seasonNumber); IEnumerable GetShowsInCollection(long collectionID); IEnumerable GetShowsInLibrary(long libraryID); - IEnumerable GetShowsByPeople(long peopleID); + IEnumerable GetShowsByPeople(string peopleSlug); IEnumerable GetLibrariesPath(); //Internal read diff --git a/Kyoo.Common/Models/People.cs b/Kyoo.Common/Models/People.cs index 05848eaf..44770180 100644 --- a/Kyoo.Common/Models/People.cs +++ b/Kyoo.Common/Models/People.cs @@ -5,7 +5,6 @@ namespace Kyoo.Models { public class People : IMergable { - [JsonIgnore] public long ID { get; set; } public string Slug { get; set; } public string Name { get; set; } [JsonIgnore] public string ImgPrimary { get; set; } @@ -27,8 +26,6 @@ namespace Kyoo.Models { if (other == null) return this; - if (ID == -1) - ID = other.ID; if (Slug == null) Slug = other.Slug; if (Name == null) diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index 2f28d73b..b853f74a 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -5,7 +5,7 @@ namespace Kyoo.Models public class PeopleLink { [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long PeopleID { get; set; } + [JsonIgnore] public string PeopleID { get; set; } [JsonIgnore] public virtual People People { get; set; } public string Slug => People.Slug; diff --git a/Kyoo/Controllers/Crawler.cs b/Kyoo/Controllers/Crawler.cs index 70952f4c..233053ba 100644 --- a/Kyoo/Controllers/Crawler.cs +++ b/Kyoo/Controllers/Crawler.cs @@ -120,7 +120,11 @@ 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).ToList(); + show.People = (await _metadataProvider.GetPeople(show, library)).Select(x => + { + People existing = _libraryManager.GetPeopleBySlug(x.Slug); + return existing != null ? new PeopleLink(existing, x.Role, x.Type) : x; + }).ToList(); return show; } diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index 32775497..b4f795a5 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -218,9 +218,9 @@ namespace Kyoo.Controllers .OrderBy(x => x.Title); } - public IEnumerable GetShowsByPeople(long peopleID) + public IEnumerable GetShowsByPeople(string peopleSlug) { - return (from link in _database.PeopleLinks where link.PeopleID == peopleID select link.Show).OrderBy(x => x.Title); + return (from link in _database.PeopleLinks where link.PeopleID == peopleSlug select link.Show).OrderBy(x => x.Title); } public IEnumerable GetAllEpisodes() @@ -305,18 +305,6 @@ namespace Kyoo.Controllers _database.SaveChanges(); return studio.ID; } - - public long GetOrCreatePeople(People people) - { - People existingPeople = GetPeopleBySlug(people.Slug); - - if (existingPeople != null) - return existingPeople.ID; - - _database.Peoples.Add(people); - _database.SaveChanges(); - return people.ID; - } #endregion #region Write Into The Database diff --git a/Kyoo/DatabaseContext.cs b/Kyoo/DatabaseContext.cs index f334656d..562da005 100644 --- a/Kyoo/DatabaseContext.cs +++ b/Kyoo/DatabaseContext.cs @@ -52,6 +52,9 @@ namespace Kyoo modelBuilder.Entity() .Property(t => t.IsForced) .ValueGeneratedNever(); + + modelBuilder.Entity() + .HasKey(x => x.Slug); modelBuilder.Entity() .HasKey(x => new {x.ShowID, x.GenreID}); diff --git a/Kyoo/HtmlAPI/PeopleAPI.cs b/Kyoo/HtmlAPI/PeopleAPI.cs index 84f7b3f8..ca630c4a 100644 --- a/Kyoo/HtmlAPI/PeopleAPI.cs +++ b/Kyoo/HtmlAPI/PeopleAPI.cs @@ -24,7 +24,7 @@ namespace Kyoo.Api return NotFound(); Collection collection = new Collection(people.Slug, people.Name, null, null) { - Shows = _libraryManager.GetShowsByPeople(people.ID), + Shows = _libraryManager.GetShowsByPeople(people.Slug), Poster = "peopleimg/" + people.Slug }; return collection;