Now using PeopleLink instead of People when we were talking about people related to a show

This commit is contained in:
Zoe Roux 2020-02-10 01:14:46 +01:00
parent d8a21f1cf1
commit 9d6da207fe
14 changed files with 52 additions and 63 deletions

View File

@ -9,7 +9,7 @@ namespace Kyoo.Controllers
//Read values
string GetShowExternalIDs(long showID);
Studio GetStudio(long showID);
IEnumerable<People> GetPeople(long showID);
IEnumerable<PeopleLink> GetPeople(long showID);
IEnumerable<Genre> GetGenreForShow(long showID);
IEnumerable<Season> GetSeasons(long showID);
int GetSeasonCount(string showSlug, long seasonNumber);

View File

@ -14,7 +14,7 @@ namespace Kyoo.Controllers
//For the show
Task<Show> GetShowByID(string id);
Task<Show> GetShowFromName(string showName);
Task<IEnumerable<People>> GetPeople(Show show);
Task<IEnumerable<PeopleLink>> GetPeople(Show show);
//For the seasons
Task<Season> GetSeason(Show show, long seasonNumber);

View File

@ -10,6 +10,6 @@ namespace Kyoo.Controllers
Task<Show> GetShowFromName(string showName, string showPath, Library library);
Task<Season> GetSeason(Show show, long seasonNumber, Library library);
Task<Episode> GetEpisode(Show show, string episodePath, long seasonNumber, long episodeNumber, long absoluteNumber, Library library);
Task<IEnumerable<People>> GetPeople(Show show, Library library);
Task<IEnumerable<PeopleLink>> GetPeople(Show show, Library library);
}
}

View File

@ -7,7 +7,7 @@ namespace Kyoo.Controllers
public interface IThumbnailsManager
{
Task<Show> Validate(Show show);
Task<IEnumerable<People>> Validate(IEnumerable<People> actors);
Task<IEnumerable<PeopleLink>> Validate(List<PeopleLink> actors);
Task<Episode> Validate(Episode episode);
}
}

View File

@ -11,7 +11,7 @@
<Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.7</PackageVersion>
<PackageVersion>1.0.9</PackageVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -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<PeopleLink> Roles { get; set; }
[JsonIgnore] public virtual IEnumerable<PeopleLink> 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;

View File

@ -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;
}
}
}

View File

@ -29,10 +29,10 @@ namespace Kyoo.Models
public bool IsCollection;
public IEnumerable<Genre> Genres;
public virtual IEnumerable<Genre> Genres { get; set; }
public virtual Studio Studio { get; set; }
[JsonIgnore] public virtual IEnumerable<PeopleLink> People { get; set; }
[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
public virtual IEnumerable<PeopleLink> People { get; set; }
public virtual IEnumerable<Season> Seasons { get; set; }
[JsonIgnore] public virtual IEnumerable<Episode> Episodes { get; set; }

@ -1 +1 @@
Subproject commit d18cfcbc3b2b3b309d5d90aee673c9146aa55faa
Subproject commit 1a7094979c79dd3e50760afbc6bf5b2286e7ab9d

View File

@ -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;
}

View File

@ -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<People> GetPeople(long showID)
public IEnumerable<PeopleLink> 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)

View File

@ -90,10 +90,10 @@ namespace Kyoo.Controllers
return episode;
}
public async Task<IEnumerable<People>> GetPeople(Show show, Library library)
public async Task<IEnumerable<PeopleLink>> GetPeople(Show show, Library library)
{
IEnumerable<People> people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data");
people = await _thumbnailsManager.Validate(people);
IEnumerable<PeopleLink> people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data");
people = await _thumbnailsManager.Validate(people.ToList());
return people;
}
}

View File

@ -68,22 +68,22 @@ namespace Kyoo.Controllers
return show;
}
public async Task<IEnumerable<People>> Validate(IEnumerable<People> people)
public async Task<IEnumerable<PeopleLink>> Validate(List<PeopleLink> people)
{
if (people == null)
return null;
foreach (People peop in people)
foreach (PeopleLink peop in people)
{
string root = _config.GetValue<string>("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)
{

View File

@ -43,7 +43,7 @@ namespace Kyoo
services.AddSingleton<ITranscoder, Transcoder>();
services.AddSingleton<IThumbnailsManager, ThumbnailsManager>();
services.AddSingleton<IProviderManager, ProviderManager>();
services.AddSingleton<ICrawler, Crawler>();
services.AddScoped<ICrawler, Crawler>();
services.AddSingleton<IPluginManager, PluginManager>();
}