From b38fa395ce7b5e601154f3bfa624b36b87ef2602 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Wed, 5 Mar 2014 22:32:21 +0800 Subject: [PATCH] Fix mouse click issues and add a new hotmovie plugin. --- .../Wox.Plugin.HotMovies/Images/movies.png | Bin 0 -> 1816 bytes Plugins/Wox.Plugin.HotMovies/main.py | 29 +++++++++ Plugins/Wox.Plugin.HotMovies/main.pyc | Bin 0 -> 1627 bytes Plugins/Wox.Plugin.HotMovies/plugin.json | 11 ++++ .../Wox.Plugin.PluginManagement/Main.cs | 22 +++++++ .../Properties/AssemblyInfo.cs | 36 +++++++++++ .../Wox.Plugin.PluginManagement.csproj | 58 ++++++++++++++++++ Wox.sln | 31 ++++++++++ Wox/MainWindow.xaml.cs | 8 +-- Wox/PluginLoader/PythonPluginLoader.cs | 9 +++ Wox/ResultPanel.xaml | 4 +- Wox/ResultPanel.xaml.cs | 21 +++++++ 12 files changed, 222 insertions(+), 7 deletions(-) create mode 100644 Plugins/Wox.Plugin.HotMovies/Images/movies.png create mode 100644 Plugins/Wox.Plugin.HotMovies/main.py create mode 100644 Plugins/Wox.Plugin.HotMovies/main.pyc create mode 100644 Plugins/Wox.Plugin.HotMovies/plugin.json create mode 100644 Wox.Plugin/Wox.Plugin.PluginManagement/Main.cs create mode 100644 Wox.Plugin/Wox.Plugin.PluginManagement/Properties/AssemblyInfo.cs create mode 100644 Wox.Plugin/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj diff --git a/Plugins/Wox.Plugin.HotMovies/Images/movies.png b/Plugins/Wox.Plugin.HotMovies/Images/movies.png new file mode 100644 index 0000000000000000000000000000000000000000..da2cd6128806d598cfaf79f5439bfdcfaad85057 GIT binary patch literal 1816 zcmV+z2j}>SP)FP<5#y-nm_WxF3d1<>y}N(F;LI?juBj(^ne*P< zbI*6b@4I*2=yowzRRa=_|Y4{`kt3EB}>cdBw|W z8V95Sc{_LR{FBvcwK$zlkE*KT^5x6o?AdR`)2BXBQ&Up|Obaa3zhFZH!_>yfvOL{v zuFPAs=&ih@q@-qWX_l|;-OApJzsi9jL{S5i_k|HBVIT0V1TQkuzRdgaokOEfk%@!farsH#eAY%FfK z8;{4s+ix$Su<$*SlV{^_I5>FlAl==!sjqKf&z?X3b^G@1yMQ0Y1CRhrk!5-MjvYI) zSFT)Hn3$M2>%oHuzc_!smDbkt^z`(gC<;OdG)-gErp@H!FGF~PMl6B27`f!hzOP}S;F$= zD~OMOh2GxYfxCC@4`o@Nt!Y|EAOo*AH8t(Y%gcNB-7>D8A(P)2F1n2WM^liX_~Ox?R^~`9Uc4j z?fYj}SC_rFw|Btj^Zf%5egKluXe@BM-Su^Kby8(zC0SWn*lac&4hI1F`S}zT731{| zVX;^^efsn${nMvUCqF-*f`S5KVq)-kJnEf0cOF`;){DoE9lO}w-R*F>Ttk|s-DUV7 zdg9kVNP@w^!KV=s5yq)gr(!TfP+R*Y&CUO!rluB)#e&spMW@ptgdi;~oq~b_7B5~z zR8$m?A3yfoym`}Ru~`1o(9m%8-o1N$0|NsOMjHMI3;_Lr;&;D4{1VJ*ZEgKLH#hf< z>gs9^95{f{Xhf&ep{go+y`G$$Hz_Ds!R*;7NRoun7$NL-`wwMh+fFHp^2lH?3`(-3 z{nWM+fKI1-R9jPX4tU^yZY(TZ`TN@1FNF|7WMpKBRjXEs!-o%x&d%?}lP9h*m&@fA zLtd|Vk#IO3_XD|s3;-m4cBJaY+LDiA)6>(DBniF#MGwmHW8=n+{{DW7ii%jebSZ6ZZB$iNA%tMdmaU|uq+mAh=i6_u6BQN3 zC!drP9UYC?Tsge=0wOHOnVIuhzrGZk?G_akE?LO7l#fJb4*l4a_X9hJ90r_uc3FgEJzV3vFZh!M&a3Ty)U*Bzn2s($tdq8LkLiL4T zoe->^Cy|{fu{uL=?7E=(x=R00;MlQsLI_Y52mv4yE;I$9`4H;J6_WcW{-sf3-LGX% z{!UN9>jaEd#?+ztKvM!hg#j>%S5rV8DNub73L?bH(KURH>T{3SM@~eRoto?R3}Dqp(#j0_)RFr0`NB)ksz$&g&0F4z!kff-QT$A zagI}m7-sUhOsI}fKMHDu^ihL71JLtCVfR@l&0U@#1Bx(a6xx_y<8c6paU>Y|>~Z>V z$Lsn0l8egoPsU0VlKZ#tum^(K3-19nM1l}Xx7I%z^E}+X4`dJkO&ufOxaWY<+Z{3q zA&o+t1kDh3T|)8t&;C&zf&dJ920Z}1HLJr;@N>oe`}aKzzn%pHurxOxEiEmb^7N@M zl5zjEgkRnBhOE>3zW%D=@4y|#X_6KS>}L**;Wy)Z0RICzkRmU(Vw2_o0000 0 else "" + +def query(key): + r = requests.get('http://www.gewara.com/movie/searchMovie.xhtml') + bs = BeautifulSoup(r.text) + results = [] + for i in bs.select(".ui_left .ui_media"): + res = {} + score = safeSelectText(i,".grade sub") + safeSelectText(i,".grade sup") + res["Title"] = safeSelectText(i,".title a") + " / " + score + res["SubTitle"] = i.select(".ui_text p")[1].text + res["ActionName"] = "openUrl" + res["IcoPath"] = "Images\\movies.png" + res["ActionPara"] = "http://www.gewara.com" + i.select(".title a")[0]["href"] + results.append(res) + return json.dumps(results) + +def openUrl(context,url): + webbrowser.open(url) + +if __name__ == "__main__": + print query("movie geo") diff --git a/Plugins/Wox.Plugin.HotMovies/main.pyc b/Plugins/Wox.Plugin.HotMovies/main.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f0c77719634d9b2394bedcf833bd6f410badf44 GIT binary patch literal 1627 zcmb_cOK;mo5S}F^S#st05u}Eb0M${KQitXg7=`mfl0yYUN)fCkSh5V@eh5mr{o1xtxK#wLl!CiL+4B5aq0b*?;;VlbOo!bunMyEQowguAawH>lo%TXDTmA+jJ!I2zHO6j z(?&Y>$+@Ll1p0W}x#io;qie?-26T0YPNBp0x>D;N%IXrY?9yrUlTdw7dqUj-bb2a^DFSe+VbgWv|6paSg-ub z_rf9@Wn9FO(S8*!q@dnjn1(y*e``JYv4+0(PoCPhB>Gi?sRzRmoY z8!mnK$~+c@w_$OPaWW6E<9~B(=9EWqQ6Zb}hR;!iVGnZ4QB?Xvt&KG@$Fa5($Y{c9 z6HaBq(<8I(mk2SEIbNC~mjt6aE6q^0@a8LhEz@3Mq=*6|fmYhoDeQCJiFkoTv`tu4 zT8@ICyEzYBcVtvubHe5!5UG8<9rZKdv3jH)s$IOls6+MN&A{Qx@!)zl$D_Fx_`aIT zy)teNGh1EhAgGF!(Unw#Th}adAwrY}jg~~~D!t?MChY$NaC5+=h4VRI2J^Y$rplNM zVqHj!C;JddEP;8_w3bJF@|Y2aJ9)&2t=^c*F?RF$_ptA Query(Query query) + { + return null; + } + + public void Init(PluginInitContext context) + { + this.context = context; + } + } +} diff --git a/Wox.Plugin/Wox.Plugin.PluginManagement/Properties/AssemblyInfo.cs b/Wox.Plugin/Wox.Plugin.PluginManagement/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..8d7b20b980 --- /dev/null +++ b/Wox.Plugin/Wox.Plugin.PluginManagement/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Wox.Plugin.PluginManagement")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wox.Plugin.PluginManagement")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("92b59bab-5c8c-414b-a8d7-326c7be3a11d")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Wox.Plugin/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj b/Wox.Plugin/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj new file mode 100644 index 0000000000..f66ee5248d --- /dev/null +++ b/Wox.Plugin/Wox.Plugin.PluginManagement/Wox.Plugin.PluginManagement.csproj @@ -0,0 +1,58 @@ + + + + + Debug + AnyCPU + {049490F0-ECD2-4148-9B39-2135EC346EBE} + Library + Properties + Wox.Plugin.PluginManagement + Wox.Plugin.PluginManagement + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + {8451ecdd-2ea4-4966-bb0a-7bbc40138e80} + Wox.Plugin + + + + + \ No newline at end of file diff --git a/Wox.sln b/Wox.sln index 50bcaea9f5..45cb55dae0 100644 --- a/Wox.sln +++ b/Wox.sln @@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.UAC", "Wox.UAC\Wox.UAC. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.Clipboard", "Plugins\Wox.Plugin.Clipboard\Wox.Plugin.Clipboard.csproj", "{8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wox.Plugin.PluginManagement", "Wox.Plugin\Wox.Plugin.PluginManagement\Wox.Plugin.PluginManagement.csproj", "{049490F0-ECD2-4148-9B39-2135EC346EBE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -376,6 +378,34 @@ Global {8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}.UnitTests|Win32.ActiveCfg = Release|Any CPU {8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}.UnitTests|x64.ActiveCfg = Release|Any CPU {8C14DC11-2737-4DCB-A121-5D7BDD57FEA2}.UnitTests|x86.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|Win32.ActiveCfg = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x64.ActiveCfg = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Debug|x86.ActiveCfg = Debug|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|Any CPU.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|Any CPU.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|Mixed Platforms.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|Mixed Platforms.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|Win32.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|x64.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.EmbeddingTest|x86.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Any CPU.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|Win32.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x64.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.Release|x86.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|Any CPU.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|Any CPU.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|Mixed Platforms.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|Mixed Platforms.Build.0 = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|Win32.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|x64.ActiveCfg = Release|Any CPU + {049490F0-ECD2-4148-9B39-2135EC346EBE}.UnitTests|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -385,5 +415,6 @@ Global {6B6696B1-A547-4FD4-85EF-E1FD0F54AD2C} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {230AE83F-E92E-4E69-8355-426B305DA9C0} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} {8C14DC11-2737-4DCB-A121-5D7BDD57FEA2} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} + {049490F0-ECD2-4148-9B39-2135EC346EBE} = {3A73F5A7-0335-40D8-BF7C-F20BE5D0BA87} EndGlobalSection EndGlobal diff --git a/Wox/MainWindow.xaml.cs b/Wox/MainWindow.xaml.cs index 215525fd56..bd061dbef2 100644 --- a/Wox/MainWindow.xaml.cs +++ b/Wox/MainWindow.xaml.cs @@ -47,6 +47,7 @@ namespace Wox InitializeComponent(); progressBar.ToolTip = toolTip; InitialTray(); + resultCtrl.OnMouseClickItem += AcceptSelect; ThreadPool.SetMaxThreads(30, 10); InitProgressbarAnimation(); @@ -60,8 +61,6 @@ namespace Wox } } - - public void SetHotkey(string hotkeyStr, EventHandler action) { var hotkey = new HotkeyModel(hotkeyStr); @@ -285,15 +284,14 @@ namespace Wox break; case Key.Enter: - AcceptSelect(); + AcceptSelect(resultCtrl.AcceptSelect()); e.Handled = true; break; } } - private void AcceptSelect() + private void AcceptSelect(Result result) { - Result result = resultCtrl.AcceptSelect(); if (result != null) { if (result.Action != null) diff --git a/Wox/PluginLoader/PythonPluginLoader.cs b/Wox/PluginLoader/PythonPluginLoader.cs index d8b2c5db8f..e9f88c0a7e 100644 --- a/Wox/PluginLoader/PythonPluginLoader.cs +++ b/Wox/PluginLoader/PythonPluginLoader.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; using Python.Runtime; @@ -33,6 +34,7 @@ namespace Wox.PluginLoader private bool CheckPythonEnvironmentInstalled() { try { + SetPythonHome(); PythonEngine.Initialize(); PythonEngine.Shutdown(); } @@ -42,5 +44,12 @@ namespace Wox.PluginLoader } return true; } + + private void SetPythonHome() + { + //Environment.SetEnvironmentVariable("PYTHONHOME",Path.Combine(Directory.GetCurrentDirectory(),"PythonHome")); + //PythonEngine.PythonHome = + //PythonEngine.ProgramName + } } } diff --git a/Wox/ResultPanel.xaml b/Wox/ResultPanel.xaml index 2c85062e23..dc02b93ef5 100644 --- a/Wox/ResultPanel.xaml +++ b/Wox/ResultPanel.xaml @@ -11,7 +11,7 @@ - + @@ -35,7 +35,7 @@ - + diff --git a/Wox/ResultPanel.xaml.cs b/Wox/ResultPanel.xaml.cs index c272990027..8ae0cf370b 100644 --- a/Wox/ResultPanel.xaml.cs +++ b/Wox/ResultPanel.xaml.cs @@ -3,15 +3,27 @@ using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Controls; +using System.Windows.Forms; +using System.Windows.Input; using System.Windows.Media; using Wox.Helper; using Wox.Infrastructure; using Wox.Plugin; +using MessageBox = System.Windows.MessageBox; +using UserControl = System.Windows.Controls.UserControl; namespace Wox { public partial class ResultPanel : UserControl { + public event Action OnMouseClickItem; + + protected virtual void OnOnMouseClickItem(Result result) + { + Action handler = OnMouseClickItem; + if (handler != null) handler(result); + } + public bool Dirty { get; set; } public void AddResults(List results) @@ -141,5 +153,14 @@ namespace Wox lbResults.ScrollIntoView(e.AddedItems[0]); } } + + private void LbResults_OnPreviewMouseDown(object sender, MouseButtonEventArgs e) + { + var item = ItemsControl.ContainerFromElement(lbResults, e.OriginalSource as DependencyObject) as ListBoxItem; + if (item != null) + { + OnOnMouseClickItem(item.DataContext as Result); + } + } } } \ No newline at end of file