using System; using System.IO; using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Plugins; namespace MediaBrowser.Common.Plugins { /// /// Provides a BasePlugin with generics, allowing for strongly typed configuration access. /// public abstract class BaseGenericPlugin : BasePlugin where TConfigurationType : BasePluginConfiguration, new() { public new TConfigurationType Configuration { get { return base.Configuration as TConfigurationType; } set { base.Configuration = value; } } protected override Type ConfigurationType { get { return typeof(TConfigurationType); } } } /// /// Provides a common base class for all plugins /// public abstract class BasePlugin : IDisposable { /// /// Gets or sets the plugin's current context /// public KernelContext Context { get; set; } /// /// Gets the name of the plugin /// public abstract string Name { get; } /// /// Gets the type of configuration this plugin uses /// protected abstract Type ConfigurationType { get; } /// /// Gets or sets the path to the plugin's folder /// public string Path { get; set; } /// /// Gets or sets the plugin version /// public Version Version { get; set; } /// /// Gets or sets the current plugin configuration /// public BasePluginConfiguration Configuration { get; protected set; } protected string ConfigurationPath { get { return System.IO.Path.Combine(Path, "config.js"); } } public bool Enabled { get { return Configuration.Enabled; } } public DateTime ConfigurationDateLastModified { get { return Configuration.DateLastModified; } } /// /// Returns true or false indicating if the plugin should be downloaded and run within the UI. /// public virtual bool DownloadToUI { get { return false; } } /// /// Starts the plugin. /// public virtual void Init() { } /// /// Disposes the plugins. Undos all actions performed during Init. /// public virtual void Dispose() { } public void ReloadConfiguration() { if (!File.Exists(ConfigurationPath)) { Configuration = Activator.CreateInstance(ConfigurationType) as BasePluginConfiguration; } else { Configuration = JsonSerializer.DeserializeFromFile(ConfigurationType, ConfigurationPath) as BasePluginConfiguration; Configuration.DateLastModified = File.GetLastWriteTime(ConfigurationPath); } } } }