jellyfin/MediaBrowser.Common/Plugins/IPluginManager.cs

102 lines
3.7 KiB
C#
Raw Normal View History

2020-12-07 00:48:54 +01:00
using System;
using System.Collections.Generic;
using System.Reflection;
2020-12-23 17:28:50 +01:00
using System.Threading.Tasks;
2021-04-06 21:59:47 +02:00
using MediaBrowser.Model.Plugins;
2021-02-12 14:33:10 +01:00
using MediaBrowser.Model.Updates;
2020-12-07 00:48:54 +01:00
using Microsoft.Extensions.DependencyInjection;
namespace MediaBrowser.Common.Plugins
{
/// <summary>
/// Defines the <see cref="IPluginManager" />.
/// </summary>
public interface IPluginManager
{
/// <summary>
/// Gets the Plugins.
/// </summary>
IReadOnlyList<LocalPlugin> Plugins { get; }
2020-12-07 00:48:54 +01:00
/// <summary>
/// Creates the plugins.
/// </summary>
void CreatePlugins();
/// <summary>
/// Returns all the assemblies.
/// </summary>
/// <returns>An IEnumerable{Assembly}.</returns>
IEnumerable<Assembly> LoadAssemblies();
2023-01-15 21:39:57 +01:00
/// <summary>
/// Unloads all of the assemblies.
/// </summary>
void UnloadAssemblies();
2020-12-07 00:48:54 +01:00
/// <summary>
/// Registers the plugin's services with the DI.
/// Note: DI is not yet instantiated yet.
/// </summary>
/// <param name="serviceCollection">A <see cref="ServiceCollection"/> instance.</param>
void RegisterServices(IServiceCollection serviceCollection);
/// <summary>
/// Saves the manifest back to disk.
/// </summary>
/// <param name="manifest">The <see cref="PluginManifest"/> to save.</param>
/// <param name="path">The path where to save the manifest.</param>
/// <returns>True if successful.</returns>
bool SaveManifest(PluginManifest manifest, string path);
2021-02-12 14:33:10 +01:00
/// <summary>
/// Generates a manifest from repository data.
/// </summary>
/// <param name="packageInfo">The <see cref="PackageInfo"/> used to generate a manifest.</param>
/// <param name="version">Version to be installed.</param>
/// <param name="path">The path where to save the manifest.</param>
2021-04-06 21:59:47 +02:00
/// <param name="status">Initial status of the plugin.</param>
2021-02-12 14:33:10 +01:00
/// <returns>True if successful.</returns>
Task<bool> PopulateManifest(PackageInfo packageInfo, Version version, string path, PluginStatus status);
2021-02-12 14:33:10 +01:00
2020-12-07 00:48:54 +01:00
/// <summary>
/// Imports plugin details from a folder.
/// </summary>
/// <param name="folder">Folder of the plugin.</param>
void ImportPluginFrom(string folder);
/// <summary>
/// Disable the plugin.
/// </summary>
/// <param name="assembly">The <see cref="Assembly"/> of the plug to disable.</param>
void FailPlugin(Assembly assembly);
/// <summary>
/// Disable the plugin.
/// </summary>
/// <param name="plugin">The <see cref="LocalPlugin"/> of the plug to disable.</param>
void DisablePlugin(LocalPlugin plugin);
/// <summary>
/// Enables the plugin, disabling all other versions.
/// </summary>
/// <param name="plugin">The <see cref="LocalPlugin"/> of the plug to disable.</param>
void EnablePlugin(LocalPlugin plugin);
/// <summary>
/// Attempts to find the plugin with and id of <paramref name="id"/>.
/// </summary>
/// <param name="id">Id of plugin.</param>
/// <param name="version">The version of the plugin to locate.</param>
2020-12-15 21:27:42 +01:00
/// <returns>A <see cref="LocalPlugin"/> if located, or null if not.</returns>
LocalPlugin? GetPlugin(Guid id, Version? version = null);
2020-12-07 00:48:54 +01:00
/// <summary>
/// Removes the plugin.
/// </summary>
/// <param name="plugin">The plugin.</param>
/// <returns>Outcome of the operation.</returns>
bool RemovePlugin(LocalPlugin plugin);
}
}