From 7875c72dd92dea98948ccadbfa648430629a70ed Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Tue, 20 Jul 2021 00:06:26 +0200 Subject: [PATCH] Re enabling the metadata provider loader task --- Kyoo.Common/Models/MetadataID.cs | 6 ++ Kyoo.WebApp | 2 +- Kyoo/CoreModule.cs | 1 + Kyoo/Tasks/MetadataProviderLoader.cs | 121 +++++++++++++++++---------- 4 files changed, 83 insertions(+), 47 deletions(-) diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs index 34872314..de6ac817 100644 --- a/Kyoo.Common/Models/MetadataID.cs +++ b/Kyoo.Common/Models/MetadataID.cs @@ -19,6 +19,12 @@ namespace Kyoo.Models /// The URL of the resource on the external provider. /// public string Link { get; set; } + + /// + /// A shortcut to access the provider of this metadata. + /// Unlike the property, this is serializable. + /// + public Provider Provider => Second; /// /// The expression to retrieve the unique ID of a MetadataID. This is an aggregate of the two resources IDs. diff --git a/Kyoo.WebApp b/Kyoo.WebApp index dcdebad1..87783a5b 160000 --- a/Kyoo.WebApp +++ b/Kyoo.WebApp @@ -1 +1 @@ -Subproject commit dcdebad14cbcdf1f9486cb9178e6518d10c0e97f +Subproject commit 87783a5bfdd79f21d72bad13da1d96ec8e08cd42 diff --git a/Kyoo/CoreModule.cs b/Kyoo/CoreModule.cs index 4d4baf7d..1632644f 100644 --- a/Kyoo/CoreModule.cs +++ b/Kyoo/CoreModule.cs @@ -115,6 +115,7 @@ namespace Kyoo builder.RegisterTask(); builder.RegisterTask(); builder.RegisterTask(); + builder.RegisterTask(); static bool DatabaseIsPresent(IComponentRegistryBuilder x) => x.IsRegistered(new TypedService(typeof(DatabaseContext))); diff --git a/Kyoo/Tasks/MetadataProviderLoader.cs b/Kyoo/Tasks/MetadataProviderLoader.cs index 899a2657..db50f9ec 100644 --- a/Kyoo/Tasks/MetadataProviderLoader.cs +++ b/Kyoo/Tasks/MetadataProviderLoader.cs @@ -1,46 +1,75 @@ -// 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 MetadataProviderLoader : 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 async Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null) -// { -// using IServiceScope serviceScope = serviceProvider.CreateScope(); -// IProviderRepository providers = serviceScope.ServiceProvider.GetService(); -// IThumbnailsManager thumbnails = serviceScope.ServiceProvider.GetService(); -// IPluginManager pluginManager = serviceScope.ServiceProvider.GetService(); -// -// foreach (IMetadataProvider provider in pluginManager!.GetPlugins()) -// { -// if (string.IsNullOrEmpty(provider.Provider.Slug)) -// throw new ArgumentException($"Empty provider slug (name: {provider.Provider.Name})."); -// await providers!.CreateIfNotExists(provider.Provider); -// await thumbnails!.Validate(provider.Provider); -// } -// } -// -// public Task> GetPossibleParameters() -// { -// return Task.FromResult>(null); -// } -// -// public int? Progress() -// { -// return null; -// } -// } -// } \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Kyoo.Controllers; +using Kyoo.Models.Attributes; +using Kyoo.Models.Exceptions; + +namespace Kyoo.Tasks +{ + /// + /// A task that download metadata providers images. + /// + public class MetadataProviderLoader : 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 bool IsHidden => true; + + /// + /// The provider repository used to create in-db providers from metadata providers. + /// + [Injected] public IProviderRepository Providers { private get; set; } + /// + /// The thumbnail manager used to download providers logo. + /// + [Injected] public IThumbnailsManager Thumbnails { private get; set; } + /// + /// The list of metadata providers to register. + /// + [Injected] public ICollection MetadataProviders { private get; set; } + + + /// + public TaskParameters GetParameters() + { + return new(); + } + + /// + public async Task Run(TaskParameters arguments, IProgress progress, CancellationToken cancellationToken) + { + float percent = 0; + progress.Report(0); + + foreach (IMetadataProvider provider in MetadataProviders) + { + if (string.IsNullOrEmpty(provider.Provider.Slug)) + throw new TaskFailedException($"Empty provider slug (name: {provider.Provider.Name})."); + await Providers.CreateIfNotExists(provider.Provider); + await Thumbnails.DownloadImages(provider.Provider); + percent += 100f / MetadataProviders.Count; + progress.Report(percent); + } + progress.Report(100); + } + } +} \ No newline at end of file