using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models.Attributes; using Kyoo.Abstractions.Models.Exceptions; namespace Kyoo.Core.Tasks { /// /// A task that download metadata providers images. /// [TaskMetadata("reload-metadata", "Reload Metadata Providers", "Add every loaded metadata provider to the database.", RunOnStartup = true, Priority = 1000, IsHidden = true)] public class MetadataProviderLoader : ITask { /// /// The provider repository used to create in-db providers from metadata providers. /// private readonly IProviderRepository _providers; /// /// The thumbnail manager used to download providers logo. /// private readonly IThumbnailsManager _thumbnails; /// /// The list of metadata providers to register. /// private readonly ICollection _metadataProviders; /// /// Create a new task. /// /// /// The provider repository used to create in-db providers from metadata providers. /// /// /// The thumbnail manager used to download providers logo. /// /// /// The list of metadata providers to register. /// public MetadataProviderLoader(IProviderRepository providers, IThumbnailsManager thumbnails, ICollection metadataProviders) { _providers = providers; _thumbnails = thumbnails; _metadataProviders = metadataProviders; } /// 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); } } }