From 97ee9fed14e3b5d76805cd79d4378c0b71c0abd9 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Wed, 25 Jul 2012 22:33:11 -0400 Subject: Switched to MEF as a means to locate plugins and resolvers --- MediaBrowser.Controller/Kernel.cs | 48 +++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'MediaBrowser.Controller/Kernel.cs') 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 + public class Kernel : BaseKernel { public static Kernel Instance { get; private set; } @@ -37,6 +38,12 @@ namespace MediaBrowser.Controller } } + /// + /// Gets the list of currently registered entity resolvers + /// + [ImportMany(typeof(IBaseItemResolver))] + public IEnumerable EntityResolvers { get; private set; } + /// /// Creates a kernal based on a Data path, which is akin to our current programdata path /// @@ -51,35 +58,27 @@ namespace MediaBrowser.Controller ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath; ItemController.BeginResolvePath += ItemController_BeginResolvePath; - - // Add support for core media types - audio, video, etc - AddBaseItemType(); - AddBaseItemType(); - AddBaseItemType(); } - /// - /// Tells the kernel to start spinning up - /// - public override void Init() + protected override void OnComposablePartsLoaded() { - base.Init(); + List 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 Parallel.Invoke(ReloadUsers, ReloadRoot); } - /// - /// Registers a new BaseItem subclass - /// - public void AddBaseItemType() - where TBaseItemType : BaseItem, new() - where TResolverType : BaseItemResolver, new() - { - ItemController.AddResovler(); - } - /// /// Fires when a path is about to be resolved, but before child folders and files /// have been collected from the file system. @@ -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); } -- cgit v1.2.3