fix disable plugin + fix #575 #609

This commit is contained in:
bao-qian
2016-05-12 02:45:35 +01:00
parent 455e067e73
commit 45d5da98ca
6 changed files with 34 additions and 70 deletions

View File

@@ -30,7 +30,8 @@ namespace Wox.Core.Plugin
public static readonly Dictionary<string, PluginPair> NonGlobalPlugins = new Dictionary<string, PluginPair>();
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<PluginMetadata> _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<string> 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<PluginPair> 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<Result> QueryForPlugin(PluginPair pair, Query query)
{
var results = new List<Result>();

View File

@@ -16,9 +16,8 @@ namespace Wox.Core.Plugin
public const string Python = "python";
public const string PythonExecutable = "pythonw.exe";
public static List<PluginPair> Plugins(List<PluginMetadata> source, PluginsSettings settings)
public static List<PluginPair> Plugins(List<PluginMetadata> 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);

View File

@@ -10,9 +10,8 @@ namespace Wox.Core.UserSettings
public string PythonDirectory { get; set; }
public Dictionary<string, Plugin> Plugins { get; set; } = new Dictionary<string, Plugin>();
public void UpdatePluginSettings(List<PluginPair> plugins)
public void UpdatePluginSettings(List<PluginMetadata> metadatas)
{
var metadatas = plugins.Select(p => p.Metadata);
foreach (var metadata in metadatas)
{
if (Plugins.ContainsKey(metadata.ID))