diff --git a/Kyoo.Common/Kyoo.Common.csproj b/Kyoo.Common/Kyoo.Common.csproj index 904c40f5..2bf5d69c 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.18 + 1.0.19 diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs index 6095c640..b1bd7a72 100644 --- a/Kyoo.Common/Models/MetadataID.cs +++ b/Kyoo.Common/Models/MetadataID.cs @@ -1,22 +1,24 @@ +using Newtonsoft.Json; + namespace Kyoo.Models { public class MetadataID { - public long ID { get; set; } - public long ProviderID { get; set; } + [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public long ProviderID { get; set; } public virtual ProviderID Provider {get; set; } - public long? ShowID { get; set; } - public virtual Show Show { get; set; } + [JsonIgnore] public long? ShowID { get; set; } + [JsonIgnore] public virtual Show Show { get; set; } - public long? EpisodeID { get; set; } - public virtual Episode Episode { get; set; } + [JsonIgnore] public long? EpisodeID { get; set; } + [JsonIgnore] public virtual Episode Episode { get; set; } - public long? SeasonID { get; set; } - public virtual Season Season { get; set; } + [JsonIgnore] public long? SeasonID { get; set; } + [JsonIgnore] public virtual Season Season { get; set; } - public long? PeopleID { get; set; } - public virtual People People { get; set; } + [JsonIgnore] public long? PeopleID { get; set; } + [JsonIgnore] public virtual People People { get; set; } public string DataID { get; set; } public string Link { get; set; } diff --git a/Kyoo.Common/Models/ProviderID.cs b/Kyoo.Common/Models/ProviderID.cs index 53a02d82..fb90f648 100644 --- a/Kyoo.Common/Models/ProviderID.cs +++ b/Kyoo.Common/Models/ProviderID.cs @@ -1,8 +1,10 @@ +using Newtonsoft.Json; + namespace Kyoo.Models { public class ProviderID { - public long ID { get; set; } + [JsonIgnore] public long ID { get; set; } public string Name { get; set; } public string Logo { get; set; } diff --git a/Kyoo.Common/Models/ProviderLink.cs b/Kyoo.Common/Models/ProviderLink.cs index ce98b00c..6c14d955 100644 --- a/Kyoo.Common/Models/ProviderLink.cs +++ b/Kyoo.Common/Models/ProviderLink.cs @@ -1,16 +1,19 @@ +using Newtonsoft.Json; + namespace Kyoo.Models { public class ProviderLink { - public long ID { get; set; } - public long ProviderID { get; set; } - public virtual ProviderID Provider { get; set; } - public long? ShowID { get; set; } - public virtual Show Show { get; set; } - public long? LibraryID { get; set; } - public virtual Library Library { get; set; } + [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public long ProviderID { get; set; } + [JsonIgnore] public virtual ProviderID Provider { get; set; } + [JsonIgnore] public long? ShowID { get; set; } + [JsonIgnore] public virtual Show Show { get; set; } + [JsonIgnore] public long? LibraryID { get; set; } + [JsonIgnore] public virtual Library Library { get; set; } public string Name => Provider.Name; + public string Logo => Provider.Logo; public ProviderLink() { } } diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index bd884119..79e59756 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -102,7 +102,7 @@ namespace Kyoo.Models public string GetID(string provider) { - return ExternalIDs.FirstOrDefault(x => x.Provider.Name == provider)?.DataID; + return ExternalIDs?.FirstOrDefault(x => x.Provider.Name == provider)?.DataID; } public Show Merge(Show other) diff --git a/Kyoo/Models/DatabaseContext.cs b/Kyoo/Models/DatabaseContext.cs index 08aa48c6..ecd69660 100644 --- a/Kyoo/Models/DatabaseContext.cs +++ b/Kyoo/Models/DatabaseContext.cs @@ -144,6 +144,9 @@ namespace Kyoo modelBuilder.Entity() .HasIndex(x => x.Slug) .IsUnique(); + modelBuilder.Entity() + .HasIndex(x => x.Name) + .IsUnique(); } } } diff --git a/Kyoo/Tasks/CoreTaskHolder.cs b/Kyoo/Tasks/CoreTaskHolder.cs index afe56737..73f36d2a 100644 --- a/Kyoo/Tasks/CoreTaskHolder.cs +++ b/Kyoo/Tasks/CoreTaskHolder.cs @@ -9,7 +9,8 @@ namespace Kyoo.Tasks { new CreateDatabase(), new PluginLoader(), - new Crawler() + new Crawler(), + new MetadataLoader() }; } } \ No newline at end of file diff --git a/Kyoo/Tasks/Crawler.cs b/Kyoo/Tasks/Crawler.cs index c4ca99a7..ac58a2eb 100644 --- a/Kyoo/Tasks/Crawler.cs +++ b/Kyoo/Tasks/Crawler.cs @@ -140,7 +140,7 @@ namespace Kyoo.Controllers return existing != null ? new PeopleLink(existing, show, x.Role, x.Type) : x; }).ToList(); show.People = await _thumbnailsManager.Validate(show.People); - show.Genres = show.Genres.Select(x => + show.Genres = show.Genres?.Select(x => { Genre existing = _libraryManager.GetGenreBySlug(x.Slug); return existing ?? x; diff --git a/Kyoo/Tasks/MetadataLoader.cs b/Kyoo/Tasks/MetadataLoader.cs new file mode 100644 index 00000000..b1efcc04 --- /dev/null +++ b/Kyoo/Tasks/MetadataLoader.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Kyoo.Controllers; +using Kyoo.Models; +using Microsoft.Extensions.DependencyInjection; + +namespace Kyoo.Tasks +{ + public class MetadataLoader : ITask + { + public string Slug => "reload-metdata"; + public string Name => "Reload Metadata Providers"; + public string Description => "Add every loaded metadata provider to the database."; + public string HelpMessage => null; + public bool RunOnStartup => true; + public int Priority => 1000; + + public Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null) + { + using IServiceScope serviceScope = serviceProvider.CreateScope(); + DatabaseContext database = serviceScope.ServiceProvider.GetService(); + IPluginManager pluginManager = serviceScope.ServiceProvider.GetService(); + foreach (IMetadataProvider provider in pluginManager.GetPlugins()) + database.ProviderIds.AddIfNotExist(provider.Provider, x => x.Name == provider.Provider.Name); + database.SaveChanges(); + return Task.CompletedTask; + } + + public IEnumerable GetPossibleParameters() + { + return null; + } + + public int? Progress() + { + return null; + } + } +} \ No newline at end of file