using System; using System.IO; using MediaBrowser.Common.Json; 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; } } public override void ReloadConfiguration() { if (!File.Exists(ConfigurationPath)) { Configuration = new TConfigurationType(); } else { Configuration = JsonSerializer.DeserializeFromFile(ConfigurationPath); Configuration.DateLastModified = File.GetLastWriteTime(ConfigurationPath); } } } /// /// Provides a common base class for all plugins /// public abstract class BasePlugin { public abstract string Name { get; } public string Path { get { return System.IO.Path.GetDirectoryName(GetType().Assembly.Location); } } public Version Version { get { return GetType().Assembly.GetName().Version; } } 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; } } public abstract void ReloadConfiguration(); public virtual void InitInServer() { } public virtual void InitInUI() { } } }