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,