diff --git a/Plugins/Wox.Plugin.PluginIndicator/Main.cs b/Plugins/Wox.Plugin.PluginIndicator/Main.cs index 0dc809d4a9..5f9ec07be7 100644 --- a/Plugins/Wox.Plugin.PluginIndicator/Main.cs +++ b/Plugins/Wox.Plugin.PluginIndicator/Main.cs @@ -13,6 +13,8 @@ namespace Wox.Plugin.PluginIndicator var results = from keyword in PluginManager.NonGlobalPlugins.Keys where keyword.StartsWith(query.Terms[0]) let metadata = PluginManager.NonGlobalPlugins[keyword].Metadata + let disabled = PluginManager.Settings.Plugins[metadata.ID].Disabled + where !disabled select new Result { Title = keyword, diff --git a/Wox.Core/Plugin/PluginManager.cs b/Wox.Core/Plugin/PluginManager.cs index d5d2d84970..3f6e87b6c6 100644 --- a/Wox.Core/Plugin/PluginManager.cs +++ b/Wox.Core/Plugin/PluginManager.cs @@ -30,7 +30,8 @@ namespace Wox.Core.Plugin public static readonly Dictionary NonGlobalPlugins = new Dictionary(); public static IPublicAPI API { private set; get; } - private static PluginsSettings _settings; + // todo happlebao, this should not be public, the indicator function should be embeded + public static PluginsSettings Settings; private static List _metadatas; private static readonly string[] Directories = { Infrastructure.Wox.PreinstalledDirectory, Infrastructure.Wox.UserDirectory }; @@ -65,9 +66,9 @@ namespace Wox.Core.Plugin public static void LoadPlugins(PluginsSettings settings) { _metadatas = PluginConfig.Parse(Directories); - _settings = settings; - AllPlugins = PluginsLoader.Plugins(_metadatas, _settings); - _settings.UpdatePluginSettings(AllPlugins); + Settings = settings; + Settings.UpdatePluginSettings(_metadatas); + AllPlugins = PluginsLoader.Plugins(_metadatas, Settings); } public static void InitializePlugins(IPublicAPI api) { @@ -122,13 +123,14 @@ namespace Wox.Core.Plugin var search = rawQuery; List actionParameters = terms.ToList(); if (terms.Length == 0) return null; - if (NonGlobalPlugins.ContainsKey(terms[0])) + if (NonGlobalPlugins.ContainsKey(terms[0]) && + !Settings.Plugins[NonGlobalPlugins[terms[0]].Metadata.ID].Disabled) { actionKeyword = terms[0]; actionParameters = terms.Skip(1).ToList(); search = string.Join(Query.TermSeperater, actionParameters.ToArray()); } - return new Query + var query = new Query { Terms = terms, RawQuery = rawQuery, @@ -138,6 +140,7 @@ namespace Wox.Core.Plugin ActionName = actionKeyword, ActionParameters = actionParameters }; + return query; } public static List ValidPluginsForQuery(Query query) @@ -153,41 +156,6 @@ namespace Wox.Core.Plugin } } - //happlebao todo dynamic release corresponding dll / exe / process - public static void DisablePlugin(PluginPair plugin) - { - var actionKeywords = plugin.Metadata.ActionKeywords; - if (actionKeywords == null || actionKeywords.Count == 0 || actionKeywords[0] == Query.GlobalPluginWildcardSign) - { - GlobalPlugins.Remove(plugin); - } - else - { - foreach (var actionkeyword in plugin.Metadata.ActionKeywords) - { - NonGlobalPlugins.Remove(actionkeyword); - } - } - AllPlugins.Remove(plugin); - } - - public static void EnablePlugin(PluginPair plugin) - { - var actionKeywords = plugin.Metadata.ActionKeywords; - if (actionKeywords == null || actionKeywords.Count == 0 || actionKeywords[0] == Query.GlobalPluginWildcardSign) - { - GlobalPlugins.Add(plugin); - } - else - { - foreach (var actionkeyword in plugin.Metadata.ActionKeywords) - { - NonGlobalPlugins[actionkeyword] = plugin; - } - } - AllPlugins.Add(plugin); - } - public static List QueryForPlugin(PluginPair pair, Query query) { var results = new List(); diff --git a/Wox.Core/Plugin/PluginsLoader.cs b/Wox.Core/Plugin/PluginsLoader.cs index a60e87ff16..369e1f72e8 100644 --- a/Wox.Core/Plugin/PluginsLoader.cs +++ b/Wox.Core/Plugin/PluginsLoader.cs @@ -16,9 +16,8 @@ namespace Wox.Core.Plugin public const string Python = "python"; public const string PythonExecutable = "pythonw.exe"; - public static List Plugins(List source, PluginsSettings settings) + public static List Plugins(List metadatas, 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); diff --git a/Wox.Core/UserSettings/PluginSettings.cs b/Wox.Core/UserSettings/PluginSettings.cs index 926cc62361..267361c50e 100644 --- a/Wox.Core/UserSettings/PluginSettings.cs +++ b/Wox.Core/UserSettings/PluginSettings.cs @@ -10,9 +10,8 @@ namespace Wox.Core.UserSettings public string PythonDirectory { get; set; } public Dictionary Plugins { get; set; } = new Dictionary(); - public void UpdatePluginSettings(List plugins) + public void UpdatePluginSettings(List metadatas) { - var metadatas = plugins.Select(p => p.Metadata); foreach (var metadata in metadatas) { if (Plugins.ContainsKey(metadata.ID)) diff --git a/Wox/SettingWindow.xaml b/Wox/SettingWindow.xaml index 45bd9442f8..aa3180eba6 100644 --- a/Wox/SettingWindow.xaml +++ b/Wox/SettingWindow.xaml @@ -14,7 +14,7 @@ - + @@ -62,7 +62,7 @@ - @@ -119,7 +119,7 @@ - + actionKeywords = null; if (pair == null) return; @@ -631,24 +632,19 @@ namespace Wox } } - private void CbDisablePlugin_OnClick(object sender, RoutedEventArgs e) + private void OnDisablePluginClicked(object sender, RoutedEventArgs e) { - CheckBox cbDisabled = e.Source as CheckBox; - if (cbDisabled == null) return; - - var pair = lbPlugins.SelectedItem as PluginPair; - if (pair != null) + var checkBox = (CheckBox)e.Source; + var pair = (PluginPair)PluginsListBox.SelectedItem; + var id = pair.Metadata.ID; + if (checkBox.IsChecked != null) { - var id = pair.Metadata.ID; - var customizedPluginConfig = _settings.PluginSettings.Plugins[id]; - if (customizedPluginConfig.Disabled) - { - PluginManager.DisablePlugin(pair); - } - else - { - PluginManager.EnablePlugin(pair); - } + var disabled = (bool) checkBox.IsChecked; + _settings.PluginSettings.Plugins[id].Disabled = disabled; + } + else + { + Log.Warn($"IsChecked for checkbox is null for plugin: {pair.Metadata.Name}"); } } @@ -656,7 +652,7 @@ namespace Wox { if (e.ChangedButton == MouseButton.Left) { - var pair = lbPlugins.SelectedItem as PluginPair; + var pair = PluginsListBox.SelectedItem as PluginPair; if (pair != null) { //third-party plugin @@ -675,7 +671,7 @@ namespace Wox { if (e.ChangedButton == MouseButton.Left) { - var pair = lbPlugins.SelectedItem as PluginPair; + var pair = PluginsListBox.SelectedItem as PluginPair; if (pair != null) { //third-party plugin @@ -697,7 +693,7 @@ namespace Wox { if (e.ChangedButton == MouseButton.Left) { - var pair = lbPlugins.SelectedItem as PluginPair; + var pair = PluginsListBox.SelectedItem as PluginPair; if (pair != null) { //third-party plugin @@ -729,8 +725,8 @@ namespace Wox Collection = PluginManager.AllPlugins } }; - lbPlugins.ItemsSource = plugins; - lbPlugins.SelectedIndex = 0; + PluginsListBox.ItemsSource = plugins; + PluginsListBox.SelectedIndex = 0; } #endregion