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