use %APPDATA%

1. Fix can't find Result.ctor bug for plugin introduced in
c0889de1f9ae460b2cc189eb59e5bd90ddb7d17e
2. use %APPDATA% for all data, part of #389
3. MISC
This commit is contained in:
bao-qian
2016-04-27 02:15:53 +01:00
parent e96bd5a0e7
commit dc3b01dc15
22 changed files with 157 additions and 159 deletions

View File

@@ -19,7 +19,7 @@ namespace Wox.Core.Plugin
/// </summary>
/// <param name="pluginDirectories"></param>
/// <returns></returns>
public static List<PluginMetadata> Parse(List<string> pluginDirectories)
public static List<PluginMetadata> Parse(string[] pluginDirectories)
{
pluginMetadatas.Clear();
foreach (string pluginDirectory in pluginDirectories)

View File

@@ -34,7 +34,7 @@ namespace Wox.Core.Plugin
return;
}
string pluginFolerPath = PluginManager.PluginDirectory;
string pluginFolerPath = PluginManager.UserDirectory;
string newPluginName = plugin.Name
.Replace("/", "_")

View File

@@ -17,13 +17,11 @@ namespace Wox.Core.Plugin
/// </summary>
public static class PluginManager
{
public const string DirectoryName = "Plugins";
private static IEnumerable<PluginPair> _contextMenuPlugins;
/// <summary>
/// Directories that will hold Wox plugin directory
/// </summary>
private static readonly List<string> PluginDirectories = new List<string>();
public static List<PluginPair> AllPlugins { get; private set; }
@@ -34,47 +32,31 @@ namespace Wox.Core.Plugin
private static IEnumerable<PluginPair> InstantQueryPlugins { get; set; }
public static IPublicAPI API { private set; get; }
public static readonly string PluginDirectory = Path.Combine(WoxDirectroy.Executable, DirectoryName);
public const string DirectoryName = "Plugins";
public static readonly string PreinstalledDirectory = Path.Combine(Infrastructure.Wox.ProgramPath, DirectoryName);
public static readonly string UserDirectory = Path.Combine(Infrastructure.Wox.DataPath, DirectoryName);
private static readonly string[] Directories = { PreinstalledDirectory, UserDirectory };
private static void SetupPluginDirectories()
private static void ValidateUserDirectory()
{
PluginDirectories.Add(PluginDirectory);
MakesurePluginDirectoriesExist();
}
private static void MakesurePluginDirectoriesExist()
{
foreach (string pluginDirectory in PluginDirectories)
if (!Directory.Exists(UserDirectory))
{
if (!Directory.Exists(pluginDirectory))
{
try
{
Directory.CreateDirectory(pluginDirectory);
}
catch (Exception e)
{
Log.Error(e);
}
}
Directory.CreateDirectory(UserDirectory);
}
}
/// <summary>
/// Load and init all Wox plugins
/// </summary>
///
public static void Initialize()
static PluginManager()
{
SetupPluginDirectories();
var metadatas = PluginConfig.Parse(PluginDirectories);
AllPlugins = new CSharpPluginLoader().LoadPlugin(metadatas).Concat(
new JsonRPCPluginLoader<PythonPlugin>().LoadPlugin(metadatas)).ToList();
ValidateUserDirectory();
}
public static void InitializePlugins(IPublicAPI api)
{
var metadatas = PluginConfig.Parse(Directories);
var plugins1 = new CSharpPluginLoader().LoadPlugin(metadatas);
var plugins2 = new JsonRPCPluginLoader<PythonPlugin>().LoadPlugin(metadatas);
AllPlugins = plugins1.Concat(plugins2).ToList();
//load plugin i18n languages
ResourceMerger.UpdatePluginLanguages();
@@ -228,14 +210,6 @@ namespace Wox.Core.Plugin
return metadata.ActionKeywords.Contains(Query.GlobalPluginWildcardSign);
}
private static bool IsInstantQueryPlugin(PluginPair plugin)
{
//any plugin that takes more than 200ms for AvgQueryTime won't be treated as IInstantQuery plugin anymore.
return plugin.AvgQueryTime < 200 &&
plugin.Plugin is IInstantQuery &&
InstantQueryPlugins.Any(p => p.Metadata.ID == plugin.Metadata.ID);
}
/// <summary>
/// get specified plugin, return null if not found
/// </summary>

View File

@@ -8,7 +8,7 @@ namespace Wox.Core.Plugin
{
internal class PythonPlugin : JsonRPCPlugin
{
private static readonly string PythonHome = Path.Combine(WoxDirectroy.Executable, "PythonHome");
private static readonly string PythonHome = Path.Combine(Infrastructure.Wox.ProgramPath, "PythonHome");
private readonly ProcessStartInfo _startInfo;
public override string SupportedLanguage => AllowedLanguage.Python;