Finishing the rework of external ids

This commit is contained in:
Zoe Roux 2020-04-24 01:27:01 +02:00
parent 49618ccd03
commit 8b6e24c575
9 changed files with 74 additions and 22 deletions

View File

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

View File

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

View File

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

View File

@ -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() { }
}

View File

@ -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)

View File

@ -144,6 +144,9 @@ namespace Kyoo
modelBuilder.Entity<Studio>()
.HasIndex(x => x.Slug)
.IsUnique();
modelBuilder.Entity<ProviderID>()
.HasIndex(x => x.Name)
.IsUnique();
}
}
}

View File

@ -9,7 +9,8 @@ namespace Kyoo.Tasks
{
new CreateDatabase(),
new PluginLoader(),
new Crawler()
new Crawler(),
new MetadataLoader()
};
}
}

View File

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

View File

@ -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<DatabaseContext>();
IPluginManager pluginManager = serviceScope.ServiceProvider.GetService<IPluginManager>();
foreach (IMetadataProvider provider in pluginManager.GetPlugins<IMetadataProvider>())
database.ProviderIds.AddIfNotExist(provider.Provider, x => x.Name == provider.Provider.Name);
database.SaveChanges();
return Task.CompletedTask;
}
public IEnumerable<string> GetPossibleParameters()
{
return null;
}
public int? Progress()
{
return null;
}
}
}