From 81797948df5140e43d579de9b9ee9c961b805b05 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 6 Jul 2020 02:20:23 +0200 Subject: [PATCH] Cleaning the plugin manager --- Kyoo/Controllers/PluginManager.cs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Kyoo/Controllers/PluginManager.cs b/Kyoo/Controllers/PluginManager.cs index 4ea5db81..68104b48 100644 --- a/Kyoo/Controllers/PluginManager.cs +++ b/Kyoo/Controllers/PluginManager.cs @@ -50,16 +50,12 @@ namespace Kyoo.Controllers public T GetPlugin(string name) { - if (_plugins == null) - return default; - return (T)(from plugin in _plugins where plugin.Name == name && plugin is T select plugin).FirstOrDefault(); + return (T)_plugins?.FirstOrDefault(x => x.Name == name && x is T); } public IEnumerable GetPlugins() { - if (_plugins == null) - return new List(); - return from plugin in _plugins where plugin is T select (T)plugin; + return _plugins?.OfType() ?? new List(); } public IEnumerable GetAllPlugins() @@ -70,20 +66,20 @@ namespace Kyoo.Controllers public void ReloadPlugins() { string pluginFolder = _config.GetValue("plugins"); - if (!Directory.Exists(pluginFolder)) return; + string[] pluginsPaths = Directory.GetFiles(pluginFolder); - - _plugins = pluginsPaths.Select(path => + _plugins = pluginsPaths.SelectMany(path => { + path = Path.GetFullPath(path); try { - PluginDependencyLoader loader = new PluginDependencyLoader(Path.GetFullPath(path)); - Assembly ass = loader.LoadFromAssemblyPath(Path.GetFullPath(path)); - return (from type in ass.GetTypes() - where typeof(IPlugin).IsAssignableFrom(type) - select (IPlugin) ActivatorUtilities.CreateInstance(_provider, type)).FirstOrDefault(); + PluginDependencyLoader loader = new PluginDependencyLoader(path); + Assembly ass = loader.LoadFromAssemblyPath(path); + return ass.GetTypes() + .Where(x => typeof(IPlugin).IsAssignableFrom(x)) + .Select(x => (IPlugin)ActivatorUtilities.CreateInstance(_provider, x)); } catch (Exception ex) { @@ -91,6 +87,7 @@ namespace Kyoo.Controllers return null; } }).Where(x => x != null).ToList(); + if (!_plugins.Any()) { Console.WriteLine("No plugin enabled.");