using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models.Attributes; namespace Kyoo.Core.Tasks { /// /// A task run on Kyoo's startup to initialize plugins /// [TaskMetadata("plugin-init", "Plugin Initializer", "A task to initialize plugins.", RunOnStartup = true, Priority = int.MaxValue, IsHidden = true)] public class PluginInitializer : ITask { /// /// The plugin manager used to retrieve plugins to initialize them. /// private readonly IPluginManager _pluginManager; /// /// The service provider given to each method. /// private readonly IServiceProvider _provider; /// /// Create a new task /// /// The plugin manager used to retrieve plugins to initialize them. /// The service provider given to each method. public PluginInitializer(IPluginManager pluginManager, IServiceProvider provider) { _pluginManager = pluginManager; _provider = provider; } /// public TaskParameters GetParameters() { return new(); } /// public Task Run(TaskParameters arguments, IProgress progress, CancellationToken cancellationToken) { ICollection plugins = _pluginManager.GetAllPlugins(); int count = 0; progress.Report(0); foreach (IPlugin plugin in plugins) { plugin.Initialize(_provider); progress.Report(count / plugins.Count * 100); count++; } progress.Report(100); return Task.CompletedTask; } } }