aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-07-25 22:33:11 -0400
committerLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-07-25 22:33:11 -0400
commit97ee9fed14e3b5d76805cd79d4378c0b71c0abd9 (patch)
treea3814b4c22029b139cb5dd599121aa356180523a /MediaBrowser.Controller
parent84af205572e6ab9ca3e10f6de33cbce278e01335 (diff)
Switched to MEF as a means to locate plugins and resolvers
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Configuration/ServerConfigurationController.cs24
-rw-r--r--MediaBrowser.Controller/Kernel.cs48
-rw-r--r--MediaBrowser.Controller/Library/ItemController.cs14
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj2
-rw-r--r--MediaBrowser.Controller/Resolvers/AudioResolver.cs4
-rw-r--r--MediaBrowser.Controller/Resolvers/FolderResolver.cs7
-rw-r--r--MediaBrowser.Controller/Resolvers/VideoResolver.cs2
7 files changed, 36 insertions, 65 deletions
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>
{
}