// Kyoo - A portable and vast media library solution. // Copyright (c) Kyoo. // // See AUTHORS.md and LICENSE file in the project root for full license information. // // Kyoo is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // Kyoo is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Kyoo. If not, see . using System; using System.Collections.Generic; using Autofac; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Abstractions.Controllers { /// /// A common interface used to discord plugins /// /// /// You can inject services in the IPlugin constructor. /// You should only inject well known services like an ILogger, IConfiguration or IWebHostEnvironment. /// [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)] public interface IPlugin { /// /// A slug to identify this plugin in queries. /// string Slug { get; } /// /// The name of the plugin /// string Name { get; } /// /// The description of this plugin. This will be displayed on the "installed plugins" page. /// string Description { get; } /// /// true if the plugin should be enabled, false otherwise. /// If a plugin is not enabled, no configure method will be called. /// This allow one to enable a plugin if a specific configuration value is set or if the environment contains /// the right settings. /// /// /// By default, a plugin is always enabled. This method can be overriden to change this behavior. /// virtual bool Enabled => true; /// /// A list of types that will be available via the IOptions interfaces and will be listed inside /// an IConfiguration. /// /// If a field should be loosely typed, or null /// can be specified. /// WARNING: null means an unmanaged type that won't be editable. This can be used /// for external libraries or variable arguments. /// /// /// All use of the configuration must be specified here and not registered elsewhere, if a type is registered /// elsewhere the configuration won't be editable via the and all values /// will be discarded on edit. /// Dictionary Configuration { get; } /// /// An optional configuration step to allow a plugin to change asp net configurations. /// /// virtual IEnumerable ConfigureSteps => ArraySegment.Empty; /// /// A configure method that will be run on plugin's startup. /// /// The autofac service container to register services. void Configure(ContainerBuilder builder) { // Skipped } /// /// A configure method that will be run on plugin's startup. /// This is available for libraries that build upon a , for more precise /// configuration use . /// /// A service container to register new services. void Configure(IServiceCollection services) { // Skipped } /// /// An optional function to execute and initialize your plugin. /// It can be used to initialize a database connection, fill initial data or anything. /// /// A service provider to request services void Initialize(IServiceProvider provider) { // Skipped } } }