using System; using System.IO; using System.Reflection; using System.Runtime.InteropServices; using MediaBrowser.Common.Configuration; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; namespace MediaBrowser.Common.Plugins { /// <summary> /// Provides a common base class for all plugins. /// </summary> public abstract class BasePlugin : IPlugin, IPluginAssembly { /// <summary> /// Gets the name of the plugin. /// </summary> /// <value>The name.</value> public abstract string Name { get; } /// <summary> /// Gets the description. /// </summary> /// <value>The description.</value> public virtual string Description => string.Empty; /// <summary> /// Gets the unique id. /// </summary> /// <value>The unique id.</value> public virtual Guid Id { get; private set; } /// <summary> /// Gets the plugin version. /// </summary> /// <value>The version.</value> public Version Version { get; private set; } /// <summary> /// Gets the path to the assembly file. /// </summary> /// <value>The assembly file path.</value> public string AssemblyFilePath { get; private set; } /// <summary> /// Gets the full path to the data folder, where the plugin can store any miscellaneous files needed. /// </summary> /// <value>The data folder path.</value> public string DataFolderPath { get; private set; } /// <summary> /// Gets a value indicating whether the plugin can be uninstalled. /// </summary> public bool CanUninstall => !Path.GetDirectoryName(AssemblyFilePath) .Equals(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), StringComparison.InvariantCulture); /// <summary> /// Gets the plugin info. /// </summary> /// <returns>PluginInfo.</returns> public virtual PluginInfo GetPluginInfo() { var info = new PluginInfo( Name, Version, Description, Id, CanUninstall); return info; } /// <summary> /// Called just before the plugin is uninstalled from the server. /// </summary> public virtual void OnUninstalling() { } /// <inheritdoc /> public void SetAttributes(string assemblyFilePath, string dataFolderPath, Version assemblyVersion) { AssemblyFilePath = assemblyFilePath; DataFolderPath = dataFolderPath; Version = assemblyVersion; } /// <inheritdoc /> public void SetId(Guid assemblyId) { Id = assemblyId; } } }