diff options
32 files changed, 181 insertions, 281 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs index 9e5657e3c..5f5203dae 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs @@ -12,7 +12,7 @@ namespace MediaBrowser.Api.HttpHandlers {
string pluginName = QueryString["name"];
- return Kernel.Instance.PluginController.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
+ return Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
}
}
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs index a558da163..63797026d 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs @@ -13,7 +13,7 @@ namespace MediaBrowser.Api.HttpHandlers {
get
{
- var plugins = Kernel.Instance.PluginController.Plugins.Select(p =>
+ var plugins = Kernel.Instance.Plugins.Select(p =>
{
return new PluginInfo()
{
diff --git a/MediaBrowser.Api/HttpHandlers/UserConfigurationHandler.cs b/MediaBrowser.Api/HttpHandlers/UserConfigurationHandler.cs index faace9c31..06c3ea86d 100644 --- a/MediaBrowser.Api/HttpHandlers/UserConfigurationHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/UserConfigurationHandler.cs @@ -11,7 +11,7 @@ namespace MediaBrowser.Api.HttpHandlers {
Guid userId = Guid.Parse(QueryString["userid"]);
- return Kernel.Instance.ConfigurationController.GetUserConfiguration(userId);
+ return Kernel.Instance.GetUserConfiguration(userId);
}
}
}
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 25889f983..4560f70a1 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Reactive, Version=1.0.10621.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
diff --git a/MediaBrowser.Api/Plugin.cs b/MediaBrowser.Api/Plugin.cs index 6ced7a704..ebc2ffcae 100644 --- a/MediaBrowser.Api/Plugin.cs +++ b/MediaBrowser.Api/Plugin.cs @@ -1,4 +1,5 @@ using System;
+using System.ComponentModel.Composition;
using System.Reactive.Linq;
using MediaBrowser.Api.HttpHandlers;
using MediaBrowser.Common.Net;
@@ -9,6 +10,7 @@ using MediaBrowser.Model.Plugins; namespace MediaBrowser.Api
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
diff --git a/MediaBrowser.Common/Configuration/ConfigurationController.cs b/MediaBrowser.Common/Configuration/ConfigurationController.cs deleted file mode 100644 index 547d195f5..000000000 --- a/MediaBrowser.Common/Configuration/ConfigurationController.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.IO;
-using MediaBrowser.Common.Json;
-
-namespace MediaBrowser.Common.Configuration
-{
- public class ConfigurationController<TConfigurationType>
- where TConfigurationType : BaseConfiguration, new ()
- {
- /// <summary>
- /// The path to the configuration file
- /// </summary>
- public string Path { get; set; }
-
- public TConfigurationType Configuration { get; set; }
-
- public void Reload()
- {
- if (!File.Exists(Path))
- {
- Configuration = new TConfigurationType();
- }
- else
- {
- Configuration = JsonSerializer.DeserializeFromFile<TConfigurationType>(Path);
- }
- }
-
- public void Save()
- {
- }
- }
-}
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 47e5d2c94..0edfeab25 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -1,6 +1,11 @@ -using System.Configuration;
+using System.Collections.Generic;
+using System.ComponentModel.Composition;
+using System.ComponentModel.Composition.Hosting;
+using System.Configuration;
using System.IO;
+using System.Linq;
using System.Reflection;
+using System.Threading.Tasks;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Json;
using MediaBrowser.Common.Logging;
@@ -12,8 +17,7 @@ namespace MediaBrowser.Common.Kernel /// <summary>
/// Represents a shared base kernel for both the UI and server apps
/// </summary>
- public abstract class BaseKernel<TConfigurationContorllerType, TConfigurationType>
- where TConfigurationContorllerType : ConfigurationController<TConfigurationType>, new()
+ public abstract class BaseKernel<TConfigurationType>
where TConfigurationType : BaseConfiguration, new()
{
/// <summary>
@@ -21,19 +25,39 @@ namespace MediaBrowser.Common.Kernel /// </summary>
public string ProgramDataPath { get; private set; }
+ protected string PluginsPath
+ {
+ get
+ {
+ return Path.Combine(ProgramDataPath, "plugins");
+ }
+ }
+
+ protected string ConfigurationPath
+ {
+ get
+ {
+ return Path.Combine(ProgramDataPath, "config.js");
+ }
+ }
+
/// <summary>
/// Gets the current configuration
/// </summary>
- public TConfigurationContorllerType ConfigurationController { get; private set; }
+ public TConfigurationType Configuration { get; private set; }
/// <summary>
+ /// Gets the list of currently loaded plugins
+ /// </summary>
+ [ImportMany(typeof(BasePlugin))]
+ public IEnumerable<BasePlugin> Plugins { get; private set; }
+
+ /// <summary>
/// Both the UI and server will have a built-in HttpServer.
/// People will inevitably want remote control apps so it's needed in the UI too.
/// </summary>
public HttpServer HttpServer { get; private set; }
- public PluginController PluginController { get; private set; }
-
/// <summary>
/// Gets the kernel context. The UI kernel will have to override this.
/// </summary>
@@ -43,9 +67,6 @@ namespace MediaBrowser.Common.Kernel {
ProgramDataPath = GetProgramDataPath();
- PluginController = new PluginController() { PluginsPath = Path.Combine(ProgramDataPath, "Plugins") };
- ConfigurationController = new TConfigurationContorllerType() { Path = Path.Combine(ProgramDataPath, "config.js") };
-
Logger.LoggerInstance = new FileLogger(Path.Combine(ProgramDataPath, "Logs"));
}
@@ -55,7 +76,51 @@ namespace MediaBrowser.Common.Kernel ReloadHttpServer();
- ReloadPlugins();
+ ReloadComposableParts();
+ }
+
+ protected void ReloadComposableParts()
+ {
+ if (!Directory.Exists(PluginsPath))
+ {
+ Directory.CreateDirectory(PluginsPath);
+ }
+
+ var catalog = new AggregateCatalog(Directory.GetDirectories(PluginsPath, "*", SearchOption.TopDirectoryOnly).Select(f => new DirectoryCatalog(f)));
+
+ //catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
+ //catalog.Catalogs.Add(new AssemblyCatalog(GetType().Assembly));
+
+ new CompositionContainer(catalog).ComposeParts(this);
+
+ OnComposablePartsLoaded();
+ }
+
+ protected virtual void OnComposablePartsLoaded()
+ {
+ StartPlugins();
+ }
+
+ private void StartPlugins()
+ {
+ Parallel.For(0, Plugins.Count(), i =>
+ {
+ var plugin = Plugins.ElementAt(i);
+
+ plugin.ReloadConfiguration();
+
+ if (plugin.Enabled)
+ {
+ if (KernelContext == KernelContext.Server)
+ {
+ plugin.InitInServer();
+ }
+ else
+ {
+ plugin.InitInUI();
+ }
+ }
+ });
}
/// <summary>
@@ -87,9 +152,21 @@ namespace MediaBrowser.Common.Kernel private void ReloadConfiguration()
{
// Deserialize config
- ConfigurationController.Reload();
+ if (!File.Exists(ConfigurationPath))
+ {
+ Configuration = new TConfigurationType();
+ }
+ else
+ {
+ Configuration = JsonSerializer.DeserializeFromFile<TConfigurationType>(ConfigurationPath);
+ }
- Logger.LoggerInstance.LogSeverity = ConfigurationController.Configuration.LogSeverity;
+ Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity;
+ }
+
+ public void SaveConfiguration()
+ {
+ JsonSerializer.SerializeToFile(Configuration, ConfigurationPath);
}
private void ReloadHttpServer()
@@ -99,13 +176,7 @@ namespace MediaBrowser.Common.Kernel HttpServer.Dispose();
}
- HttpServer = new HttpServer("http://+:" + ConfigurationController.Configuration.HttpServerPortNumber + "/mediabrowser/");
- }
-
- protected virtual void ReloadPlugins()
- {
- // Find plugins
- PluginController.Init(KernelContext);
+ HttpServer = new HttpServer("http://+:" + Configuration.HttpServerPortNumber + "/mediabrowser/");
}
private static TConfigurationType GetConfiguration(string directory)
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index f7a223f1f..26c850d5f 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -34,6 +34,7 @@ <HintPath>..\packages\ServiceStack.Text.3.8.5\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Reactive, Version=1.0.10621.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -48,7 +49,6 @@ </ItemGroup>
<ItemGroup>
<Compile Include="Configuration\BaseConfiguration.cs" />
- <Compile Include="Configuration\ConfigurationController.cs" />
<Compile Include="Events\GenericItemEventArgs.cs" />
<Compile Include="Json\JsonSerializer.cs" />
<Compile Include="Kernel\BaseKernel.cs" />
@@ -67,7 +67,6 @@ <Compile Include="Logging\Logger.cs" />
<Compile Include="Logging\LogRow.cs" />
<Compile Include="Plugins\BasePlugin.cs" />
- <Compile Include="Plugins\PluginController.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index 7fdb2583e..44f880fd2 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -43,8 +43,22 @@ namespace MediaBrowser.Common.Plugins public abstract class BasePlugin
{
public abstract string Name { get; }
- public string Path { get; set; }
- public Version Version { get; set; }
+
+ 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; }
diff --git a/MediaBrowser.Common/Plugins/PluginController.cs b/MediaBrowser.Common/Plugins/PluginController.cs deleted file mode 100644 index c26275436..000000000 --- a/MediaBrowser.Common/Plugins/PluginController.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Threading.Tasks;
-using MediaBrowser.Common.Kernel;
-
-namespace MediaBrowser.Common.Plugins
-{
- /// <summary>
- /// Manages Plugins within the PluginsPath directory
- /// </summary>
- public class PluginController
- {
- public string PluginsPath { get; set; }
-
- /// <summary>
- /// Gets the list of currently loaded plugins
- /// </summary>
- public IEnumerable<BasePlugin> Plugins { get; private set; }
-
- /// <summary>
- /// Initializes the controller
- /// </summary>
- public void Init(KernelContext context)
- {
- AppDomain.CurrentDomain.AssemblyResolve -= new ResolveEventHandler(CurrentDomain_AssemblyResolve);
- AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
-
- Plugins = GetAllPlugins();
-
- Parallel.For(0, Plugins.Count(), i =>
- {
- var plugin = Plugins.ElementAt(i);
-
- plugin.ReloadConfiguration();
-
- if (plugin.Enabled)
- {
- if (context == KernelContext.Server)
- {
- plugin.InitInServer();
- }
- else
- {
- plugin.InitInUI();
- }
- }
- });
- }
-
- /// <summary>
- /// Gets all plugins within PluginsPath
- /// </summary>
- /// <returns></returns>
- private IEnumerable<BasePlugin> GetAllPlugins()
- {
- if (!Directory.Exists(PluginsPath))
- {
- Directory.CreateDirectory(PluginsPath);
- }
-
- List<BasePlugin> plugins = new List<BasePlugin>();
-
- foreach (string folder in Directory.GetDirectories(PluginsPath, "*", SearchOption.TopDirectoryOnly))
- {
- BasePlugin plugin = GetPluginFromDirectory(folder);
-
- plugin.Path = folder;
-
- if (plugin != null)
- {
- plugins.Add(plugin);
- }
- }
-
- return plugins;
- }
-
- private BasePlugin GetPluginFromDirectory(string path)
- {
- string dll = Directory.GetFiles(path, "*.dll", SearchOption.TopDirectoryOnly).FirstOrDefault();
-
- if (!string.IsNullOrEmpty(dll))
- {
- return GetPluginFromDll(dll);
- }
-
- return null;
- }
-
- private BasePlugin GetPluginFromDll(string path)
- {
- return GetPluginFromDll(Assembly.Load(File.ReadAllBytes(path)));
- }
-
- private BasePlugin GetPluginFromDll(Assembly assembly)
- {
- var plugin = assembly.GetTypes().Where(type => typeof(BasePlugin).IsAssignableFrom(type)).FirstOrDefault();
-
- if (plugin != null)
- {
- BasePlugin instance = plugin.GetConstructor(Type.EmptyTypes).Invoke(null) as BasePlugin;
-
- instance.Version = assembly.GetName().Version;
-
- return instance;
- }
-
- return null;
- }
-
- Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
- {
- AssemblyName assemblyName = new AssemblyName(args.Name);
-
- IEnumerable<string> dllPaths = Directory.GetFiles(PluginsPath, "*.dll", SearchOption.AllDirectories);
-
- string dll = dllPaths.FirstOrDefault(f => Path.GetFileNameWithoutExtension(f) == assemblyName.Name);
-
- if (!string.IsNullOrEmpty(dll))
- {
- return Assembly.Load(File.ReadAllBytes(dll));
- }
-
- return null;
- }
- }
-}
diff --git a/MediaBrowser.Configuration/MediaBrowser.Configuration.csproj b/MediaBrowser.Configuration/MediaBrowser.Configuration.csproj index 98b179f35..ff3cd2557 100644 --- a/MediaBrowser.Configuration/MediaBrowser.Configuration.csproj +++ b/MediaBrowser.Configuration/MediaBrowser.Configuration.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Reactive, Version=1.0.10621.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
diff --git a/MediaBrowser.Configuration/Plugin.cs b/MediaBrowser.Configuration/Plugin.cs index f88dc7a4c..ffa3e38d0 100644 --- a/MediaBrowser.Configuration/Plugin.cs +++ b/MediaBrowser.Configuration/Plugin.cs @@ -1,8 +1,10 @@ -using MediaBrowser.Common.Plugins;
+using System.ComponentModel.Composition;
+using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Plugins;
namespace MediaBrowser.Configuration
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
diff --git a/MediaBrowser.Controller/Configuration/ServerConfigurationController.cs b/MediaBrowser.Controller/Configuration/ServerConfigurationController.cs deleted file mode 100644 index 76c3cc43c..000000000 --- a/MediaBrowser.Controller/Configuration/ServerConfigurationController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System;
-using MediaBrowser.Common.Configuration;
-using MediaBrowser.Model.Configuration;
-
-namespace MediaBrowser.Controller.Configuration
-{
- /// <summary>
- /// Extends BaseConfigurationController by adding methods to get and set UIConfiguration data
- /// </summary>
- public class ServerConfigurationController : ConfigurationController<ServerConfiguration>
- {
- private string GetDictionaryKey(Guid userId, string deviceName)
- {
- string guidString = userId == Guid.Empty ? string.Empty : userId.ToString();
-
- return deviceName + "-" + guidString;
- }
-
- public UserConfiguration GetUserConfiguration(Guid userId)
- {
- return Configuration.DefaultUserConfiguration;
- }
- }
-}
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 8b2688da7..7cf12ff3f 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -1,5 +1,6 @@ using System;
using System.Collections.Generic;
+using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
@@ -17,7 +18,7 @@ using MediaBrowser.Model.Users; namespace MediaBrowser.Controller
{
- public class Kernel : BaseKernel<ServerConfigurationController, ServerConfiguration>
+ public class Kernel : BaseKernel<ServerConfiguration>
{
public static Kernel Instance { get; private set; }
@@ -38,6 +39,12 @@ namespace MediaBrowser.Controller }
/// <summary>
+ /// Gets the list of currently registered entity resolvers
+ /// </summary>
+ [ImportMany(typeof(IBaseItemResolver))]
+ public IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
+
+ /// <summary>
/// Creates a kernal based on a Data path, which is akin to our current programdata path
/// </summary>
public Kernel()
@@ -51,19 +58,21 @@ namespace MediaBrowser.Controller ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath;
ItemController.BeginResolvePath += ItemController_BeginResolvePath;
-
- // Add support for core media types - audio, video, etc
- AddBaseItemType<Folder, FolderResolver>();
- AddBaseItemType<Audio, AudioResolver>();
- AddBaseItemType<Video, VideoResolver>();
}
- /// <summary>
- /// Tells the kernel to start spinning up
- /// </summary>
- public override void Init()
+ protected override void OnComposablePartsLoaded()
{
- base.Init();
+ List<IBaseItemResolver> resolvers = EntityResolvers.ToList();
+
+ // Add the internal resolvers
+ resolvers.Add(new VideoResolver());
+ resolvers.Add(new AudioResolver());
+ resolvers.Add(new FolderResolver());
+
+ EntityResolvers = resolvers;
+
+ // The base class will fire up all the plugins
+ base.OnComposablePartsLoaded();
// Get users from users folder
// Load root media folder
@@ -71,16 +80,6 @@ namespace MediaBrowser.Controller }
/// <summary>
- /// Registers a new BaseItem subclass
- /// </summary>
- public void AddBaseItemType<TBaseItemType, TResolverType>()
- where TBaseItemType : BaseItem, new()
- where TResolverType : BaseItemResolver<TBaseItemType>, new()
- {
- ItemController.AddResovler<TBaseItemType, TResolverType>();
- }
-
- /// <summary>
/// Fires when a path is about to be resolved, but before child folders and files
/// have been collected from the file system.
/// This gives us a chance to cancel it if needed, resulting in the path being ignored
@@ -147,6 +146,11 @@ namespace MediaBrowser.Controller }
}
+ public UserConfiguration GetUserConfiguration(Guid userId)
+ {
+ return Configuration.DefaultUserConfiguration;
+ }
+
public void ReloadItem(BaseItem item)
{
Folder folder = item as Folder;
@@ -250,7 +254,7 @@ namespace MediaBrowser.Controller {
DateTime now = DateTime.Now;
- UserConfiguration config = ConfigurationController.GetUserConfiguration(userId);
+ UserConfiguration config = GetUserConfiguration(userId);
return GetParentalAllowedRecursiveChildren(parent, userId).Where(i => !(i is Folder) && (now - i.DateCreated).TotalDays < config.RecentItemDays);
}
diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index fee53e3bb..cfca9e2cc 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -13,18 +13,6 @@ namespace MediaBrowser.Controller.Library {
public class ItemController
{
- private List<IBaseItemResolver> Resolvers = new List<IBaseItemResolver>();
-
- /// <summary>
- /// Registers a new BaseItem resolver.
- /// </summary>
- public void AddResovler<TBaseItemType, TResolverType>()
- where TBaseItemType : BaseItem, new()
- where TResolverType : BaseItemResolver<TBaseItemType>, new()
- {
- Resolvers.Insert(0, new TResolverType());
- }
-
#region PreBeginResolvePath Event
/// <summary>
/// Fires when a path is about to be resolved, but before child folders and files
@@ -127,7 +115,7 @@ namespace MediaBrowser.Controller.Library private BaseItem ResolveItem(ItemResolveEventArgs args)
{
// If that didn't pan out, try the slow ones
- foreach (IBaseItemResolver resolver in Resolvers)
+ foreach (IBaseItemResolver resolver in Kernel.Instance.EntityResolvers)
{
var item = resolver.ResolvePath(args);
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 296c44d1a..8ee013063 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Reactive">
<HintPath>..\packages\Rx-Main.1.0.11226\lib\Net4\System.Reactive.dll</HintPath>
@@ -43,7 +44,6 @@ </ItemGroup>
<ItemGroup>
<Compile Include="Configuration\ServerConfiguration.cs" />
- <Compile Include="Configuration\ServerConfigurationController.cs" />
<Compile Include="Events\ItemResolveEventArgs.cs" />
<Compile Include="IO\DirectoryWatchers.cs" />
<Compile Include="IO\Shortcut.cs" />
diff --git a/MediaBrowser.Controller/Resolvers/AudioResolver.cs b/MediaBrowser.Controller/Resolvers/AudioResolver.cs index 2ca54e71d..956af95f0 100644 --- a/MediaBrowser.Controller/Resolvers/AudioResolver.cs +++ b/MediaBrowser.Controller/Resolvers/AudioResolver.cs @@ -1,9 +1,11 @@ -using System.IO;
+using System.ComponentModel.Composition;
+using System.IO;
using MediaBrowser.Controller.Events;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Resolvers
{
+ [Export(typeof(IBaseItemResolver))]
public class AudioResolver : BaseItemResolver<Audio>
{
protected override Audio Resolve(ItemResolveEventArgs args)
diff --git a/MediaBrowser.Controller/Resolvers/FolderResolver.cs b/MediaBrowser.Controller/Resolvers/FolderResolver.cs index 6101a45fd..bd91ec2ba 100644 --- a/MediaBrowser.Controller/Resolvers/FolderResolver.cs +++ b/MediaBrowser.Controller/Resolvers/FolderResolver.cs @@ -1,12 +1,11 @@ -using System.Collections.Generic;
-using System.IO;
-using System.Linq;
+using System.ComponentModel.Composition;
using MediaBrowser.Controller.Events;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Controller.Xml;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Resolvers
{
+ [Export(typeof(IBaseItemResolver))]
public class FolderResolver : BaseFolderResolver<Folder>
{
protected override Folder Resolve(ItemResolveEventArgs args)
diff --git a/MediaBrowser.Controller/Resolvers/VideoResolver.cs b/MediaBrowser.Controller/Resolvers/VideoResolver.cs index df304c329..c91f39a9b 100644 --- a/MediaBrowser.Controller/Resolvers/VideoResolver.cs +++ b/MediaBrowser.Controller/Resolvers/VideoResolver.cs @@ -1,4 +1,5 @@ using System.Collections.Generic;
+using System.ComponentModel.Composition;
using System.IO;
using MediaBrowser.Controller.Events;
using MediaBrowser.Model.Entities;
@@ -8,6 +9,7 @@ namespace MediaBrowser.Controller.Resolvers /// <summary>
/// Resolves a Path into a Video
/// </summary>
+ [Export(typeof(IBaseItemResolver))]
public class VideoResolver : BaseVideoResolver<Video>
{
}
diff --git a/MediaBrowser.HtmlBrowser/MediaBrowser.HtmlBrowser.csproj b/MediaBrowser.HtmlBrowser/MediaBrowser.HtmlBrowser.csproj index 219ec35c5..60c0f55e4 100644 --- a/MediaBrowser.HtmlBrowser/MediaBrowser.HtmlBrowser.csproj +++ b/MediaBrowser.HtmlBrowser/MediaBrowser.HtmlBrowser.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Reactive">
<HintPath>..\packages\Rx-Main.1.0.11226\lib\Net4\System.Reactive.dll</HintPath>
diff --git a/MediaBrowser.HtmlBrowser/Plugin.cs b/MediaBrowser.HtmlBrowser/Plugin.cs index 57e2886f9..815423480 100644 --- a/MediaBrowser.HtmlBrowser/Plugin.cs +++ b/MediaBrowser.HtmlBrowser/Plugin.cs @@ -1,9 +1,11 @@ -using MediaBrowser.Common.Plugins;
+using System.ComponentModel.Composition;
+using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller;
using MediaBrowser.Model.Plugins;
namespace MediaBrowser.HtmlBrowser
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
diff --git a/MediaBrowser.InternetProviders/MediaBrowser.InternetProviders.csproj b/MediaBrowser.InternetProviders/MediaBrowser.InternetProviders.csproj index c37218f85..72463f82d 100644 --- a/MediaBrowser.InternetProviders/MediaBrowser.InternetProviders.csproj +++ b/MediaBrowser.InternetProviders/MediaBrowser.InternetProviders.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
diff --git a/MediaBrowser.InternetProviders/Plugin.cs b/MediaBrowser.InternetProviders/Plugin.cs index 837b69831..c9a6d1de8 100644 --- a/MediaBrowser.InternetProviders/Plugin.cs +++ b/MediaBrowser.InternetProviders/Plugin.cs @@ -1,7 +1,9 @@ -using MediaBrowser.Common.Plugins;
+using System.ComponentModel.Composition;
+using MediaBrowser.Common.Plugins;
namespace MediaBrowser.InternetProviders
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<PluginConfiguration>
{
public override string Name
diff --git a/MediaBrowser.Movies/MediaBrowser.Movies.csproj b/MediaBrowser.Movies/MediaBrowser.Movies.csproj index 88930f0f7..81f30a6a6 100644 --- a/MediaBrowser.Movies/MediaBrowser.Movies.csproj +++ b/MediaBrowser.Movies/MediaBrowser.Movies.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml.Linq" />
diff --git a/MediaBrowser.Movies/Plugin.cs b/MediaBrowser.Movies/Plugin.cs index 54e8279b2..07dfce47b 100644 --- a/MediaBrowser.Movies/Plugin.cs +++ b/MediaBrowser.Movies/Plugin.cs @@ -1,22 +1,15 @@ -using MediaBrowser.Common.Plugins;
-using MediaBrowser.Controller;
+using System.ComponentModel.Composition;
+using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Plugins;
-using MediaBrowser.Movies.Entities;
-using MediaBrowser.Movies.Resolvers;
namespace MediaBrowser.Movies
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
{
get { return "Movies"; }
}
-
- public override void InitInServer()
- {
- Kernel.Instance.AddBaseItemType<BoxSet, BoxSetResolver>();
- Kernel.Instance.AddBaseItemType<Movie, MovieResolver>();
- }
}
}
diff --git a/MediaBrowser.Movies/Resolvers/BoxSetResolver.cs b/MediaBrowser.Movies/Resolvers/BoxSetResolver.cs index 0d53429bb..0689fe041 100644 --- a/MediaBrowser.Movies/Resolvers/BoxSetResolver.cs +++ b/MediaBrowser.Movies/Resolvers/BoxSetResolver.cs @@ -1,4 +1,5 @@ using System;
+using System.ComponentModel.Composition;
using System.IO;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers;
@@ -6,6 +7,7 @@ using MediaBrowser.Movies.Entities; namespace MediaBrowser.Movies.Resolvers
{
+ [Export(typeof(IBaseItemResolver))]
public class BoxSetResolver : BaseFolderResolver<BoxSet>
{
protected override BoxSet Resolve(ItemResolveEventArgs args)
diff --git a/MediaBrowser.Movies/Resolvers/MovieResolver.cs b/MediaBrowser.Movies/Resolvers/MovieResolver.cs index 94c427b10..f21da937d 100644 --- a/MediaBrowser.Movies/Resolvers/MovieResolver.cs +++ b/MediaBrowser.Movies/Resolvers/MovieResolver.cs @@ -1,5 +1,6 @@ using System;
using System.Collections.Generic;
+using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using MediaBrowser.Controller;
@@ -11,6 +12,7 @@ using MediaBrowser.Movies.Metadata; namespace MediaBrowser.Movies.Resolvers
{
+ [Export(typeof(IBaseItemResolver))]
public class MovieResolver : BaseVideoResolver<Movie>
{
protected override Movie Resolve(ItemResolveEventArgs args)
diff --git a/MediaBrowser.TV/MediaBrowser.TV.csproj b/MediaBrowser.TV/MediaBrowser.TV.csproj index a8128a0eb..0476c0408 100644 --- a/MediaBrowser.TV/MediaBrowser.TV.csproj +++ b/MediaBrowser.TV/MediaBrowser.TV.csproj @@ -31,6 +31,7 @@ </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml.Linq" />
diff --git a/MediaBrowser.TV/Plugin.cs b/MediaBrowser.TV/Plugin.cs index e68e73740..ecc5a17f1 100644 --- a/MediaBrowser.TV/Plugin.cs +++ b/MediaBrowser.TV/Plugin.cs @@ -1,13 +1,14 @@ using System;
+using System.ComponentModel.Composition;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Events;
using MediaBrowser.Model.Plugins;
using MediaBrowser.TV.Entities;
-using MediaBrowser.TV.Resolvers;
namespace MediaBrowser.TV
{
+ [Export(typeof(BasePlugin))]
public class Plugin : BaseGenericPlugin<BasePluginConfiguration>
{
public override string Name
@@ -17,10 +18,6 @@ namespace MediaBrowser.TV public override void InitInServer()
{
- Kernel.Instance.AddBaseItemType<Series, SeriesResolver>();
- Kernel.Instance.AddBaseItemType<Season, SeasonResolver>();
- Kernel.Instance.AddBaseItemType<Episode, EpisodeResolver>();
-
Kernel.Instance.ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath;
}
diff --git a/MediaBrowser.TV/Resolvers/EpisodeResolver.cs b/MediaBrowser.TV/Resolvers/EpisodeResolver.cs index ad6acd5fc..dce0ba7d3 100644 --- a/MediaBrowser.TV/Resolvers/EpisodeResolver.cs +++ b/MediaBrowser.TV/Resolvers/EpisodeResolver.cs @@ -1,4 +1,5 @@ using System;
+using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using MediaBrowser.Controller.Events;
@@ -8,7 +9,8 @@ using MediaBrowser.TV.Metadata; namespace MediaBrowser.TV.Resolvers
{
- class EpisodeResolver : BaseVideoResolver<Episode>
+ [Export(typeof(IBaseItemResolver))]
+ public class EpisodeResolver : BaseVideoResolver<Episode>
{
protected override Episode Resolve(ItemResolveEventArgs args)
{
diff --git a/MediaBrowser.TV/Resolvers/SeasonResolver.cs b/MediaBrowser.TV/Resolvers/SeasonResolver.cs index 3d4f03828..85c880a3a 100644 --- a/MediaBrowser.TV/Resolvers/SeasonResolver.cs +++ b/MediaBrowser.TV/Resolvers/SeasonResolver.cs @@ -1,13 +1,13 @@ -using System;
+using System.ComponentModel.Composition;
using System.IO;
-using System.Linq;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.TV.Entities;
namespace MediaBrowser.TV.Resolvers
{
- class SeasonResolver : BaseFolderResolver<Season>
+ [Export(typeof(IBaseItemResolver))]
+ public class SeasonResolver : BaseFolderResolver<Season>
{
protected override Season Resolve(ItemResolveEventArgs args)
{
diff --git a/MediaBrowser.TV/Resolvers/SeriesResolver.cs b/MediaBrowser.TV/Resolvers/SeriesResolver.cs index fe0b1f0ce..0b63a325c 100644 --- a/MediaBrowser.TV/Resolvers/SeriesResolver.cs +++ b/MediaBrowser.TV/Resolvers/SeriesResolver.cs @@ -1,4 +1,5 @@ using System;
+using System.ComponentModel.Composition;
using System.IO;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers;
@@ -7,7 +8,8 @@ using MediaBrowser.TV.Metadata; namespace MediaBrowser.TV.Resolvers
{
- class SeriesResolver : BaseFolderResolver<Series>
+ [Export(typeof(IBaseItemResolver))]
+ public class SeriesResolver : BaseFolderResolver<Series>
{
protected override Series Resolve(ItemResolveEventArgs args)
{
|
