diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs
index 2b8ee81cba..d5d2d84970 100644
--- a/Wox.Core/Plugin/PluginManager.cs
+++ b/Wox.Core/Plugin/PluginManager.cs
@@ -55,18 +55,22 @@ namespace Wox.Core.Plugin
{
ValidateUserDirectory();
- // todo happlebao temp hack to let MainVM to register ResultsUpdated event
- _metadatas = PluginConfig.Parse(Directories);
- AllPlugins = PluginsLoader.CSharpPlugins(_metadatas).ToList();
}
- public static void InitializePlugins(IPublicAPI api, PluginsSettings settings)
- {
- _settings = settings;
- var plugins = PluginsLoader.PythonPlugins(_metadatas, _settings.PythonDirectory);
- var executable_plugins = PluginsLoader.ExecutablePlugins(_metadatas);
- AllPlugins = AllPlugins.Concat(plugins).Concat(executable_plugins).ToList();
- _settings.UpdatePluginSettings(AllPlugins);
+ ///
+ /// because InitializePlugins needs API, so LoadPlugins needs to be called first
+ /// todo happlebao The API should be removed
+ ///
+ ///
+ public static void LoadPlugins(PluginsSettings settings)
+ {
+ _metadatas = PluginConfig.Parse(Directories);
+ _settings = settings;
+ AllPlugins = PluginsLoader.Plugins(_metadatas, _settings);
+ _settings.UpdatePluginSettings(AllPlugins);
+ }
+ public static void InitializePlugins(IPublicAPI api)
+ {
//load plugin i18n languages
ResourceMerger.UpdatePluginLanguages();
@@ -149,7 +153,7 @@ namespace Wox.Core.Plugin
}
}
- //happlebao todo prevent plugin initial when plugin is disabled
+ //happlebao todo dynamic release corresponding dll / exe / process
public static void DisablePlugin(PluginPair plugin)
{
var actionKeywords = plugin.Metadata.ActionKeywords;
diff --git a/Wox.Core/Plugin/PluginsLoader.cs b/Wox.Core/Plugin/PluginsLoader.cs
index 8817de03a2..a60e87ff16 100644
--- a/Wox.Core/Plugin/PluginsLoader.cs
+++ b/Wox.Core/Plugin/PluginsLoader.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
+using Wox.Core.UserSettings;
using Wox.Infrastructure.Exception;
using Wox.Infrastructure.Logger;
using Wox.Plugin;
@@ -15,6 +16,16 @@ namespace Wox.Core.Plugin
public const string Python = "python";
public const string PythonExecutable = "pythonw.exe";
+ public static List Plugins(List source, PluginsSettings settings)
+ {
+ var metadatas = source.Where(m => !settings.Plugins[m.ID].Disabled).ToList();
+ var csharpPlugins = CSharpPlugins(metadatas).ToList();
+ var pythonPlugins = PythonPlugins(metadatas, settings.PythonDirectory);
+ var executablePlugins = ExecutablePlugins(metadatas);
+ var plugins = csharpPlugins.Concat(pythonPlugins).Concat(executablePlugins).ToList();
+ return plugins;
+ }
+
public static IEnumerable CSharpPlugins(List source)
{
var plugins = new List();
diff --git a/Wox/App.xaml.cs b/Wox/App.xaml.cs
index c96f3bddcb..dcd6b03aea 100644
--- a/Wox/App.xaml.cs
+++ b/Wox/App.xaml.cs
@@ -3,8 +3,10 @@ using System.Diagnostics;
using System.Windows;
using Wox.Core;
using Wox.Core.Plugin;
+using Wox.Core.UserSettings;
using Wox.Helper;
using Wox.Infrastructure.Image;
+using Wox.Infrastructure.Storage;
using Wox.ViewModel;
using Stopwatch = Wox.Infrastructure.Stopwatch;
@@ -38,11 +40,15 @@ namespace Wox
ImageLoader.PreloadImages();
- var vm = new MainViewModel();
- var pluginsSettings = vm._settings.PluginSettings;
- var window = new MainWindow(vm._settings, vm);
- API = new PublicAPIInstance(vm._settings, vm);
- PluginManager.InitializePlugins(API, pluginsSettings);
+ var storage = new JsonStrorage();
+ var settings = storage.Load();
+
+ PluginManager.LoadPlugins(settings.PluginSettings);
+ var vm = new MainViewModel(settings, storage);
+ var pluginsSettings = settings.PluginSettings;
+ var window = new MainWindow(settings, vm);
+ API = new PublicAPIInstance(settings, vm);
+ PluginManager.InitializePlugins(API);
RegisterExitEvents();
diff --git a/Wox/ViewModel/MainViewModel.cs b/Wox/ViewModel/MainViewModel.cs
index 3f180cc8c7..8477364f95 100644
--- a/Wox/ViewModel/MainViewModel.cs
+++ b/Wox/ViewModel/MainViewModel.cs
@@ -42,8 +42,7 @@ namespace Wox.ViewModel
private readonly JsonStrorage _queryHistoryStorage;
private readonly JsonStrorage _userSelectedRecordStorage;
private readonly JsonStrorage _topMostRecordStorage;
- // todo happlebao this field should be private in the future
- public readonly Settings _settings;
+ private readonly Settings _settings;
private readonly QueryHistory _queryHistory;
private readonly UserSelectedRecord _userSelectedRecord;
private readonly TopMostRecord _topMostRecord;
@@ -56,15 +55,15 @@ namespace Wox.ViewModel
#region Constructor
- public MainViewModel()
+ public MainViewModel(Settings settings, JsonStrorage storage)
{
_saved = false;
_queryTextBeforeLoadContextMenu = "";
_queryText = "";
_lastQuery = new Query();
- _settingsStorage = new JsonStrorage();
- _settings = _settingsStorage.Load();
+ _settingsStorage = storage;
+ _settings = settings;
// happlebao todo temp fix for instance code logic
HttpProxy.Instance.Settings = _settings;