diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/ClipboardMonitor.cs b/Plugins/Wox.Plugin.Clipboard/ClipboardMonitor.cs
similarity index 100%
rename from Plugins/Wox.Plugin.DotnetPluginTest/ClipboardMonitor.cs
rename to Plugins/Wox.Plugin.Clipboard/ClipboardMonitor.cs
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/Images/clipboard.png b/Plugins/Wox.Plugin.Clipboard/Images/clipboard.png
similarity index 100%
rename from Plugins/Wox.Plugin.DotnetPluginTest/Images/clipboard.png
rename to Plugins/Wox.Plugin.Clipboard/Images/clipboard.png
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/Main.cs b/Plugins/Wox.Plugin.Clipboard/Main.cs
similarity index 100%
rename from Plugins/Wox.Plugin.DotnetPluginTest/Main.cs
rename to Plugins/Wox.Plugin.Clipboard/Main.cs
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/Properties/AssemblyInfo.cs b/Plugins/Wox.Plugin.Clipboard/Properties/AssemblyInfo.cs
similarity index 100%
rename from Plugins/Wox.Plugin.DotnetPluginTest/Properties/AssemblyInfo.cs
rename to Plugins/Wox.Plugin.Clipboard/Properties/AssemblyInfo.cs
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/Wox.Plugin.Clipboard.csproj b/Plugins/Wox.Plugin.Clipboard/Wox.Plugin.Clipboard.csproj
similarity index 97%
rename from Plugins/Wox.Plugin.DotnetPluginTest/Wox.Plugin.Clipboard.csproj
rename to Plugins/Wox.Plugin.Clipboard/Wox.Plugin.Clipboard.csproj
index b0acbe14f1..8122c2481c 100644
--- a/Plugins/Wox.Plugin.DotnetPluginTest/Wox.Plugin.Clipboard.csproj
+++ b/Plugins/Wox.Plugin.Clipboard/Wox.Plugin.Clipboard.csproj
@@ -60,7 +60,7 @@
-
+
Always
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/packages.config b/Plugins/Wox.Plugin.Clipboard/packages.config
similarity index 100%
rename from Plugins/Wox.Plugin.DotnetPluginTest/packages.config
rename to Plugins/Wox.Plugin.Clipboard/packages.config
diff --git a/Plugins/Wox.Plugin.Clipboard/plugin.json b/Plugins/Wox.Plugin.Clipboard/plugin.json
new file mode 100644
index 0000000000..50f32957f5
--- /dev/null
+++ b/Plugins/Wox.Plugin.Clipboard/plugin.json
@@ -0,0 +1,12 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6C",
+ "ActionKeyword":"cb",
+ "Name":"Wox.Plugin.Clipboard",
+ "Description":"clipboard history search",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"csharp",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"Wox.Plugin.Clipboard.dll"
+}
+
diff --git a/Plugins/Wox.Plugin.Doc/Main.cs b/Plugins/Wox.Plugin.Doc/Main.cs
index b506acf7cf..170ce72e50 100644
--- a/Plugins/Wox.Plugin.Doc/Main.cs
+++ b/Plugins/Wox.Plugin.Doc/Main.cs
@@ -53,7 +53,7 @@ namespace Wox.Plugin.Doc
public void Init(PluginInitContext context)
{
- docsetBasePath = context.PluginMetadata.PluginDirecotry + @"Docset";
+ docsetBasePath = context.CurrentPluginMetadata.PluginDirecotry + @"Docset";
if (!Directory.Exists(docsetBasePath))
Directory.CreateDirectory(docsetBasePath);
diff --git a/Plugins/Wox.Plugin.Doc/Wox.Plugin.Doc.csproj b/Plugins/Wox.Plugin.Doc/Wox.Plugin.Doc.csproj
index 9376906653..8c26c6a50e 100644
--- a/Plugins/Wox.Plugin.Doc/Wox.Plugin.Doc.csproj
+++ b/Plugins/Wox.Plugin.Doc/Wox.Plugin.Doc.csproj
@@ -80,7 +80,7 @@
-
+
Always
diff --git a/Plugins/Wox.Plugin.Doc/plugin.ini b/Plugins/Wox.Plugin.Doc/plugin.ini
deleted file mode 100644
index 0544588fb6..0000000000
--- a/Plugins/Wox.Plugin.Doc/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = doc
-Name = Dash.Doc
-Author = qianlifeng
-Version = 0.1
-Language = csharp
-Description = Offline doc, inspired by dash
-ExecuteFile = Wox.Plugin.Doc.dll
diff --git a/Plugins/Wox.Plugin.Doc/plugin.json b/Plugins/Wox.Plugin.Doc/plugin.json
new file mode 100644
index 0000000000..ecc1de97ed
--- /dev/null
+++ b/Plugins/Wox.Plugin.Doc/plugin.json
@@ -0,0 +1,11 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6B",
+ "ActionKeyword":"doc",
+ "Name":"Dash.Doc",
+ "Description":"Offline doc, inspired by dash",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"csharp",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"Wox.Plugin.Doc.dll"
+}
diff --git a/Plugins/Wox.Plugin.DotnetPluginTest/plugin.ini b/Plugins/Wox.Plugin.DotnetPluginTest/plugin.ini
deleted file mode 100644
index 7a6cb08644..0000000000
--- a/Plugins/Wox.Plugin.DotnetPluginTest/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = cb
-Name = clipboard monitor
-Author = qianlifeng
-Version = 0.1
-Language = csharp
-Description = clipboard monitor
-ExecuteFile = Wox.Plugin.Clipboard.dll
diff --git a/Plugins/Wox.Plugin.DouBan/plugin.ini b/Plugins/Wox.Plugin.DouBan/plugin.ini
deleted file mode 100644
index c0105b8d19..0000000000
--- a/Plugins/Wox.Plugin.DouBan/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = movie
-Name = douban
-Author = qianlifeng
-Version = 0.1
-Language = python
-Description = test
-ExecuteFile = main.py
diff --git a/Plugins/Wox.Plugin.DouBan/plugin.json b/Plugins/Wox.Plugin.DouBan/plugin.json
new file mode 100644
index 0000000000..dbdb0ea9df
--- /dev/null
+++ b/Plugins/Wox.Plugin.DouBan/plugin.json
@@ -0,0 +1,11 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6D",
+ "ActionKeyword":"movie",
+ "Name":"Wox.Plugin.Douban.Movie",
+ "Description":"search douban movies",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"python",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"main.py"
+}
diff --git a/Plugins/Wox.Plugin.Everything/Main.cs b/Plugins/Wox.Plugin.Everything/Main.cs
index 1783aed190..c16dd91cef 100644
--- a/Plugins/Wox.Plugin.Everything/Main.cs
+++ b/Plugins/Wox.Plugin.Everything/Main.cs
@@ -55,7 +55,7 @@ namespace Wox.Plugin.Everything
this.context = context;
LoadLibrary(Path.Combine(
- Path.Combine(context.PluginMetadata.PluginDirecotry, (IntPtr.Size == 4) ? "x86" : "x64"),
+ Path.Combine(context.CurrentPluginMetadata.PluginDirecotry, (IntPtr.Size == 4) ? "x86" : "x64"),
"Everything.dll"
));
//init everything
diff --git a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj
index bd9b27beb2..1bb7e1c277 100644
--- a/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj
+++ b/Plugins/Wox.Plugin.Everything/Wox.Plugin.Everything.csproj
@@ -70,15 +70,15 @@
Wox.Plugin
-
-
- Always
-
-
+
+
+ Always
+
+
xcopy /Y /E $(TargetDir)*.* $(SolutionDir)Wox\bin\Debug\Plugins\$(ProjectName)\
diff --git a/Plugins/Wox.Plugin.Everything/plugin.ini b/Plugins/Wox.Plugin.Everything/plugin.ini
deleted file mode 100644
index f41e7ed9ed..0000000000
--- a/Plugins/Wox.Plugin.Everything/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = ev
-Name = everything
-Author = qianlifeng
-Version = 0.1
-Language = csharp
-Description = test
-ExecuteFile = Wox.Plugin.Everything.dll
diff --git a/Plugins/Wox.Plugin.Everything/plugin.json b/Plugins/Wox.Plugin.Everything/plugin.json
new file mode 100644
index 0000000000..f2548edfb0
--- /dev/null
+++ b/Plugins/Wox.Plugin.Everything/plugin.json
@@ -0,0 +1,11 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6E",
+ "ActionKeyword":"ev",
+ "Name":"Wox.Plugin.Everything",
+ "Description":"Search Everything",
+ "Author":"orzfly",
+ "Version":"1.0",
+ "Language":"csharp",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"Wox.Plugin.Everything.dll"
+}
diff --git a/Plugins/Wox.Plugin.Fanyi/Wox.Plugin.Fanyi.csproj b/Plugins/Wox.Plugin.Fanyi/Wox.Plugin.Fanyi.csproj
index 0960b62fe8..d9c5d27216 100644
--- a/Plugins/Wox.Plugin.Fanyi/Wox.Plugin.Fanyi.csproj
+++ b/Plugins/Wox.Plugin.Fanyi/Wox.Plugin.Fanyi.csproj
@@ -59,7 +59,7 @@
-
+
Always
diff --git a/Plugins/Wox.Plugin.Fanyi/plugin.ini b/Plugins/Wox.Plugin.Fanyi/plugin.ini
deleted file mode 100644
index 8bd1df40b9..0000000000
--- a/Plugins/Wox.Plugin.Fanyi/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = fy
-Name = Translator
-Author = qianlifeng
-Version = 0.1
-Language = csharp
-Description = Chinese and English Translator
-ExecuteFile = Wox.Plugin.Fanyi.dll
diff --git a/Plugins/Wox.Plugin.Fanyi/plugin.json b/Plugins/Wox.Plugin.Fanyi/plugin.json
new file mode 100644
index 0000000000..81623f7c4d
--- /dev/null
+++ b/Plugins/Wox.Plugin.Fanyi/plugin.json
@@ -0,0 +1,11 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6A",
+ "ActionKeyword":"fy",
+ "Name":"Baidu Translator",
+ "Description":"Translate Chinese and English",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"csharp",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"Wox.Plugin.Fanyi.dll"
+}
diff --git a/Plugins/Wox.Plugin.Kill/plugin.ini b/Plugins/Wox.Plugin.Kill/plugin.ini
deleted file mode 100644
index c83fe44658..0000000000
--- a/Plugins/Wox.Plugin.Kill/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = kill
-Name = Wox.Kill
-Author = qianlifeng
-Version = 0.1
-Language = python
-Description = kill process
-ExecuteFile = main.py
diff --git a/Plugins/Wox.Plugin.Kill/plugin.json b/Plugins/Wox.Plugin.Kill/plugin.json
new file mode 100644
index 0000000000..beefa69c3a
--- /dev/null
+++ b/Plugins/Wox.Plugin.Kill/plugin.json
@@ -0,0 +1,12 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6G",
+ "ActionKeyword":"kill",
+ "Name":"Wox.Plugin.kill",
+ "Description":"kill running program",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"python",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"main.py"
+}
+
diff --git a/Plugins/Wox.Plugin.V2ex/plugin.ini b/Plugins/Wox.Plugin.V2ex/plugin.ini
deleted file mode 100644
index 42b85b05b4..0000000000
--- a/Plugins/Wox.Plugin.V2ex/plugin.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[plugin]
-ActionKeyword = v2ex
-Name = Wox.V2ex
-Author = qianlifeng
-Version = 0.1
-Language = python
-Description = workflow for v2ex
-ExecuteFile = main.py
diff --git a/Plugins/Wox.Plugin.V2ex/plugin.json b/Plugins/Wox.Plugin.V2ex/plugin.json
new file mode 100644
index 0000000000..5ced969262
--- /dev/null
+++ b/Plugins/Wox.Plugin.V2ex/plugin.json
@@ -0,0 +1,12 @@
+{
+ "ID":"D2D2C23B084D411DB66FE0C79D6C2A6H",
+ "ActionKeyword":"v2ex",
+ "Name":"Wox.Plugin.v2ex",
+ "Description":"v2ex viewer",
+ "Author":"qianlifeng",
+ "Version":"1.0",
+ "Language":"python",
+ "Website":"http://www.getwox.com",
+ "ExecuteFileName":"main.py"
+}
+
diff --git a/Pythonnet.Runtime/delegateobject.cs b/Pythonnet.Runtime/delegateobject.cs
index 839fb71e59..467b9d0644 100644
--- a/Pythonnet.Runtime/delegateobject.cs
+++ b/Pythonnet.Runtime/delegateobject.cs
@@ -82,7 +82,6 @@ namespace Python.Runtime {
//====================================================================
public static IntPtr tp_call(IntPtr ob, IntPtr args, IntPtr kw) {
- // todo: add fast type check!
IntPtr pytype = Runtime.PyObject_TYPE(ob);
DelegateObject self = (DelegateObject)GetManagedObject(pytype);
CLRObject o = GetManagedObject(ob) as CLRObject;
diff --git a/Pythonnet.Runtime/exceptions.cs b/Pythonnet.Runtime/exceptions.cs
index f08217dac6..2c70c38c19 100644
--- a/Pythonnet.Runtime/exceptions.cs
+++ b/Pythonnet.Runtime/exceptions.cs
@@ -384,7 +384,6 @@ namespace Python.Runtime {
///
public static PythonException GetException() {
- // TODO: implement this.
return null;
}
diff --git a/Pythonnet.Runtime/interop.cs b/Pythonnet.Runtime/interop.cs
index 9aad4c6e40..b88a3f5049 100644
--- a/Pythonnet.Runtime/interop.cs
+++ b/Pythonnet.Runtime/interop.cs
@@ -330,7 +330,6 @@ namespace Python.Runtime {
public static int ValidVersionTag = (1 << 19);
public static int IsAbstract = (1 << 20);
public static int HaveNewBuffer = (1 << 21);
- // TODO: Implement FastSubclass functions
public static int IntSubclass = (1 << 23);
public static int LongSubclass = (1 << 24);
public static int ListSubclass = (1 << 25);
diff --git a/Pythonnet.Runtime/metatype.cs b/Pythonnet.Runtime/metatype.cs
index 305437c84e..cb14ac99e7 100644
--- a/Pythonnet.Runtime/metatype.cs
+++ b/Pythonnet.Runtime/metatype.cs
@@ -88,7 +88,6 @@ namespace Python.Runtime {
);
}
- // hack for now... fix for 1.0
//return TypeManager.CreateSubType(args);
diff --git a/Pythonnet.Runtime/methodobject.cs b/Pythonnet.Runtime/methodobject.cs
index 15a5cd5478..5567540fb4 100644
--- a/Pythonnet.Runtime/methodobject.cs
+++ b/Pythonnet.Runtime/methodobject.cs
@@ -17,7 +17,6 @@ namespace Python.Runtime {
// Implements a Python type that represents a CLR method. Method objects
// support a subscript syntax [] to allow explicit overload selection.
//========================================================================
- // TODO: ForbidPythonThreadsAttribute per method info
internal class MethodObject : ExtensionType {
diff --git a/Pythonnet.Runtime/pynumber.cs b/Pythonnet.Runtime/pynumber.cs
index 16927dac30..c03c8c5276 100644
--- a/Pythonnet.Runtime/pynumber.cs
+++ b/Pythonnet.Runtime/pynumber.cs
@@ -37,11 +37,6 @@ namespace Python.Runtime {
}
- // TODO: add all of the PyNumber_XXX methods.
-
-
-
-
}
}
diff --git a/Wox.Plugin.System/Setting.cs b/Wox.Plugin.System/Setting.cs
index d565820819..f824f2cf94 100644
--- a/Wox.Plugin.System/Setting.cs
+++ b/Wox.Plugin.System/Setting.cs
@@ -15,7 +15,7 @@ namespace Wox.Plugin.System
{
results.Add(new Result()
{
- Title = "Wox Setting Dialog",
+ Title = "Wox Setting",
Score = 100,
IcoPath = "Images/app.png",
Action = (contenxt) =>
diff --git a/Wox.Plugin/PluginInitContext.cs b/Wox.Plugin/PluginInitContext.cs
index 674d4d9474..f60626e0c5 100644
--- a/Wox.Plugin/PluginInitContext.cs
+++ b/Wox.Plugin/PluginInitContext.cs
@@ -8,7 +8,8 @@ namespace Wox.Plugin
public class PluginInitContext
{
public List Plugins { get; set; }
- public PluginMetadata PluginMetadata { get; set; }
+ public PluginMetadata CurrentPluginMetadata { get; set; }
+
public Action ChangeQuery { get; set; }
public Action CloseApp { get; set; }
diff --git a/Wox.Plugin/PluginMetadata.cs b/Wox.Plugin/PluginMetadata.cs
index f3b4fae629..2b7fc9b1f9 100644
--- a/Wox.Plugin/PluginMetadata.cs
+++ b/Wox.Plugin/PluginMetadata.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
@@ -7,12 +8,29 @@ namespace Wox.Plugin
{
public class PluginMetadata
{
+ private int configVersion = 1;
+
+ ///
+ /// if we need to change the plugin config in the futher, use this to
+ /// indicate config version
+ ///
+ public int ConfigVersion
+ {
+ get { return configVersion; }
+ set { configVersion = value; }
+ }
+ public string ID { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public string Version { get; set; }
public string Language { get; set; }
public string Description { get; set; }
- public string ExecuteFilePath { get; set; }
+
+ public string ExecuteFilePath
+ {
+ get { return Path.Combine(PluginDirecotry, ExecuteFileName); }
+ }
+
public string ExecuteFileName { get; set; }
public string PluginDirecotry { get; set; }
public string ActionKeyword { get; set; }
diff --git a/Wox.sln b/Wox.sln
index 44105f6cdb..50bcaea9f5 100644
--- a/Wox.sln
+++ b/Wox.sln
@@ -25,7 +25,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Everything", "Pl
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.UAC", "Wox.UAC\Wox.UAC.csproj", "{C9BC17A0-C2BC-4185-AC1F-32E3352C1233}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Clipboard", "Plugins\Wox.Plugin.DotnetPluginTest\Wox.Plugin.Clipboard.csproj", "{8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Clipboard", "Plugins\Wox.Plugin.Clipboard\Wox.Plugin.Clipboard.csproj", "{8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Wox/Helper/PluginInstaller.cs b/Wox/Helper/PluginInstaller.cs
index 66af34c36b..dfa2f20120 100644
--- a/Wox/Helper/PluginInstaller.cs
+++ b/Wox/Helper/PluginInstaller.cs
@@ -168,7 +168,6 @@ namespace Wox.Helper
metadata.Version = ini.GetSetting("plugin", "Version");
metadata.PluginType = PluginType.ThirdParty;
metadata.ActionKeyword = ini.GetSetting("plugin", "ActionKeyword");
- metadata.ExecuteFilePath = directory + "\\" + ini.GetSetting("plugin", "ExecuteFile");
metadata.PluginDirecotry = directory + "\\";
metadata.ExecuteFileName = ini.GetSetting("plugin", "ExecuteFile");
diff --git a/Wox/ImagePathConverter.cs b/Wox/ImagePathConverter.cs
index 534b857b6e..3887ca207d 100644
--- a/Wox/ImagePathConverter.cs
+++ b/Wox/ImagePathConverter.cs
@@ -32,9 +32,9 @@ namespace Wox
{
resolvedPath = path;
}
- else if (!string.IsNullOrEmpty(path) && File.Exists(pluginDirectory + path))
+ else if (!string.IsNullOrEmpty(path) && File.Exists(Path.Combine(pluginDirectory,path)))
{
- resolvedPath = pluginDirectory + path;
+ resolvedPath = Path.Combine(pluginDirectory, path);
}
if (resolvedPath.ToLower().EndsWith(".exe") || resolvedPath.ToLower().EndsWith(".lnk"))
diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs
index 4f7bbd8867..9706af9777 100644
--- a/Wox/MainWindow.xaml.cs
+++ b/Wox/MainWindow.xaml.cs
@@ -67,7 +67,7 @@ namespace Wox
}
catch (Exception)
{
- MessageBox.Show("Registe hotkey: " + CommonStorage.Instance.UserSetting.Hotkey + " failed.");
+ MessageBox.Show("Registe hotkey: " + hotkeyStr + " failed.");
}
}
diff --git a/Wox/PluginLoader/BasePluginLoader.cs b/Wox/PluginLoader/BasePluginLoader.cs
index 7109c7d009..5729254fa6 100644
--- a/Wox/PluginLoader/BasePluginLoader.cs
+++ b/Wox/PluginLoader/BasePluginLoader.cs
@@ -4,8 +4,8 @@ using System.IO;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
+using Newtonsoft.Json;
using Wox.Helper;
-using Wox.Infrastructure;
using Wox.Plugin;
using Wox.Plugin.System;
@@ -14,7 +14,7 @@ namespace Wox.PluginLoader
public abstract class BasePluginLoader
{
private static string PluginPath = AppDomain.CurrentDomain.BaseDirectory + "Plugins";
- private static string PluginConfigName = "plugin.ini";
+ private static string PluginConfigName = "plugin.json";
protected static List pluginMetadatas = new List();
public abstract List LoadPlugin();
@@ -36,7 +36,6 @@ namespace Wox.PluginLoader
metadata.PluginType = PluginType.System;
metadata.ActionKeyword = "*";
metadata.ExecuteFileName = "Wox.Plugin.System.dll";
- metadata.ExecuteFilePath = AppDomain.CurrentDomain.BaseDirectory + metadata.ExecuteFileName;
metadata.PluginDirecotry = AppDomain.CurrentDomain.BaseDirectory;
pluginMetadatas.Add(metadata);
}
@@ -49,84 +48,67 @@ namespace Wox.PluginLoader
string[] directories = Directory.GetDirectories(PluginPath);
foreach (string directory in directories)
{
- PluginMetadata metadata = GetMetadataFromIni(directory);
+ PluginMetadata metadata = GetMetadataFromJson(directory);
if (metadata != null) pluginMetadatas.Add(metadata);
}
}
- private static PluginMetadata GetMetadataFromIni(string directory)
+ private static PluginMetadata GetMetadataFromJson(string pluginDirectory)
{
- string iniPath = directory + "\\" + PluginConfigName;
+ string configPath = Path.Combine(pluginDirectory, PluginConfigName);
+ PluginMetadata metadata;
- if (!File.Exists(iniPath))
+ if (!File.Exists(configPath))
{
- Log.Error(string.Format("parse plugin {0} failed: didn't find config file.", iniPath));
+ Log.Error(string.Format("parse plugin {0} failed: didn't find config file.", configPath));
return null;
}
try
{
- PluginMetadata metadata = new PluginMetadata();
- IniParser ini = new IniParser(iniPath);
- metadata.Name = ini.GetSetting("plugin", "Name");
- metadata.Author = ini.GetSetting("plugin", "Author");
- metadata.Description = ini.GetSetting("plugin", "Description");
- metadata.Language = ini.GetSetting("plugin", "Language");
- metadata.Version = ini.GetSetting("plugin", "Version");
+ metadata = JsonConvert.DeserializeObject(File.ReadAllText(configPath));
metadata.PluginType = PluginType.ThirdParty;
- metadata.ActionKeyword = ini.GetSetting("plugin", "ActionKeyword");
- metadata.ExecuteFilePath = directory + "\\" + ini.GetSetting("plugin", "ExecuteFile");
- metadata.PluginDirecotry = directory + "\\";
- metadata.ExecuteFileName = ini.GetSetting("plugin", "ExecuteFile");
-
- if (!AllowedLanguage.IsAllowed(metadata.Language))
- {
- string error = string.Format("Parse ini {0} failed: invalid language {1}", iniPath,
- metadata.Language);
- Log.Error(error);
-#if (DEBUG)
- {
- throw new WoxException(error);
- }
-#endif
- return null;
- }
- if (!File.Exists(metadata.ExecuteFilePath))
- {
- string error = string.Format("Parse ini {0} failed: ExecuteFilePath didn't exist {1}", iniPath,
- metadata.ExecuteFilePath);
- Log.Error(error);
-#if (DEBUG)
- {
- throw new WoxException(error);
- }
-#endif
- return null;
- }
-
- return metadata;
+ metadata.PluginDirecotry = pluginDirectory;
}
- catch (Exception e)
+ catch (Exception)
{
- Log.Error(string.Format("Parse ini {0} failed: {1}", iniPath, e.Message));
+ string error = string.Format("Parse plugin config {0} failed: json format is not valid", configPath);
+ Log.Error(error);
#if (DEBUG)
{
- throw;
+ throw new WoxException(error);
}
#endif
return null;
}
+
+
+ if (!AllowedLanguage.IsAllowed(metadata.Language))
+ {
+ string error = string.Format("Parse plugin config {0} failed: invalid language {1}", configPath,
+ metadata.Language);
+ Log.Error(error);
+#if (DEBUG)
+ {
+ throw new WoxException(error);
+ }
+#endif
+ return null;
+ }
+ if (!File.Exists(metadata.ExecuteFilePath))
+ {
+ string error = string.Format("Parse plugin config {0} failed: ExecuteFile {1} didn't exist", configPath,
+ metadata.ExecuteFilePath);
+ Log.Error(error);
+#if (DEBUG)
+ {
+ throw new WoxException(error);
+ }
+#endif
+ return null;
+ }
+
+ return metadata;
}
-
- /////
- ///// Change python execute file name to unique file name using GUID
- ///// this is because if two pythong plugin use the same
- /////
- /////
- /////
- //private static PluginMetadata filterPythonMetadata(PluginMetadata metadata)
- //{
-
- //}
}
}
diff --git a/Wox/PluginLoader/Plugins.cs b/Wox/PluginLoader/Plugins.cs
index 0fc8e534f5..579c1d94f4 100644
--- a/Wox/PluginLoader/Plugins.cs
+++ b/Wox/PluginLoader/Plugins.cs
@@ -29,7 +29,7 @@ namespace Wox.PluginLoader
ThreadPool.QueueUserWorkItem(o => plugin1.Init(new PluginInitContext()
{
Plugins = plugins,
- PluginMetadata = metadata,
+ CurrentPluginMetadata = metadata,
ChangeQuery = s => App.Window.ChangeQuery(s),
CloseApp = App.Window.CloseApp,
HideApp = App.Window.HideApp,