From 9481d04a19138599cdbec6d515514bef83cb3b78 Mon Sep 17 00:00:00 2001 From: qianlifeng Date: Mon, 3 Nov 2014 17:30:48 +0800 Subject: [PATCH] Add custom context menu setting for findfile plugin and improve the search speed. --- .../FindFileContextMenuStorage.cs | 46 ++++++++++++++++++ Plugins/Wox.Plugin.FindFile/Images/list.png | Bin 0 -> 1775 bytes .../MFTSearch/MFTSearcher.cs | 2 +- .../MFTSearch/MFTSearcherCache.cs | 21 +++++--- Plugins/Wox.Plugin.FindFile/Main.cs | 42 ++++++++++------ .../Wox.Plugin.FindFile.csproj | 37 ++++++++++++++ Plugins/Wox.Plugin.FindFile/packages.config | 6 +++ Plugins/Wox.Plugin.FindFile/setting.xaml | 20 ++++++++ Plugins/Wox.Plugin.FindFile/setting.xaml.cs | 31 ++++++++++++ Wox.Test/MFTSearcherTest.cs | 3 +- 10 files changed, 182 insertions(+), 26 deletions(-) create mode 100644 Plugins/Wox.Plugin.FindFile/FindFileContextMenuStorage.cs create mode 100644 Plugins/Wox.Plugin.FindFile/Images/list.png create mode 100644 Plugins/Wox.Plugin.FindFile/packages.config create mode 100644 Plugins/Wox.Plugin.FindFile/setting.xaml create mode 100644 Plugins/Wox.Plugin.FindFile/setting.xaml.cs diff --git a/Plugins/Wox.Plugin.FindFile/FindFileContextMenuStorage.cs b/Plugins/Wox.Plugin.FindFile/FindFileContextMenuStorage.cs new file mode 100644 index 0000000000..7bb3b61a7f --- /dev/null +++ b/Plugins/Wox.Plugin.FindFile/FindFileContextMenuStorage.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using Wox.Infrastructure.Storage; + +namespace Wox.Plugin.FindFile +{ + public class FindFileContextMenuStorage : BaseStorage + { + [JsonProperty] + public List ContextMenus = new List(); + + protected override string ConfigName + { + get { return "FindFileContextMenu"; } + } + + protected override FindFileContextMenuStorage LoadDefaultConfig() + { + ContextMenus = new List() + { + new ContextMenu() + { + Name = "Open Containing Folder", + Command = "explorer.exe", + Argument = " /select \"{path}\"" + } + }; + return this; + } + } + + public class ContextMenu + { + [JsonProperty] + public string Name { get; set; } + + [JsonProperty] + public string Command { get; set; } + + [JsonProperty] + public string Argument { get; set; } + } +} diff --git a/Plugins/Wox.Plugin.FindFile/Images/list.png b/Plugins/Wox.Plugin.FindFile/Images/list.png new file mode 100644 index 0000000000000000000000000000000000000000..ab96e07812b12479ad11a2bd6ed66bf430df671e GIT binary patch literal 1775 zcmVM`18+|b`#y1m9G-elHjPcR9>x1~BPbQk^KAC9rMUzcXAJEn4df7y| zCM%a^xri*caw)W(nNH{8`Tuh1l$K80X=i5fBtOGUXWE|gpZ`1GcV=o+6a|j6+2NSm zu@8VV-#7Sitk+NnE_PkZ>w2433_wTganqQ1tc3A14x7tnwpmp`W-pxS8_hcaH%2de zaq~WoXOf+FIm>`?`b?bM3Xgw=(ZAPw+TR(>IsoW=3vPZ*cANr-%?Td&339m=mU&E3 zq*r>{`##SK1Tiq5;%FoRQV)pFyh2a1!oW3Z|L~8Aw;$9TfbWMdb>g*;r+Po9qYN{E zv54>c!-tdiS{7A6X-gR`Ont`bh4}Pa&6Ez!0l;W6sg5(Qid~eoUH~u)m}~-Y=$Ok< z3U<32tje6zfqj|)B$W!A9m}2%tSlSSeRoY6;HIf>1LZ!9K*j(#9VOtjd%&vGFDoJl zVi-h;<8umt%UMqM9S%1%*Ik54Zwv6kHq5OI0Luqd*Oiu>K%8ISai-Q(*Ohr{Q9iqKM0ye5cME)FB{^Ns;&&p~ z7oZF(bab^o4~@0w=&?#~6OL2x)8M#VNPpamp! z&;ciFx>Vwh$1PqWRiSEz- z`wQ%Zm!Jw2ABVJbadjx6{UpH8gYQ9&?=*NzYc&BL>DuU7T>@KED8^>>uL4p66I|Q8 zLq|%JM3l&rbR1jtkPzs*(@Ul*dTv3Na(E~@?b{O)Dxr~B3o`<5spVmD}=$Umaz=( z>4A95Im>27j0Kk40yA62p5Pu1xLqaC+4>w(-ZqG!Rv(-C3bw;5s`Gr_dU`K0UhZNj zme!Fn7w18$FdLvGNOug_qsHgYz68yU7wCSquNkToFua-`>26%c2^5@huBwS1Bs9TRyJ)*AjR#mSd61<-|D7$2|$uU+=;Bg{qT#kbWe+~ zsF#4cg+)Y8F>hb#MHRBa0K#&Jw5pD0zySu3C&O4iWW~wu*Gz@qx;(^TdS5wsR#4i1 zW-y-ma$34+(s3Pq(jEX}S9*s(#tr#RTzGG-lkSe$nwlEyOB^q!6;PRgtnZWVdQ@3Y zRhBnA77Q&}spgO4`0eVeBSS|j$b69;17xU|=wN;l`u`tKA9FkQ0r*dV0RR!F$#kTn RHR=EW002ovPDHLkV1l4JGhzS$ literal 0 HcmV?d00001 diff --git a/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcher.cs b/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcher.cs index 870aef9cd8..6ce6f51e69 100644 --- a/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcher.cs +++ b/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcher.cs @@ -39,7 +39,7 @@ namespace Wox.Plugin.FindFile.MFTSearch { if (string.IsNullOrEmpty(item)) return new List(); - List found = cache.FindByName(item); + List found = cache.FindByName(item,100); found.ForEach(x => FillPath(x.VolumeName, x, cache)); return found.ConvertAll(o => new MFTSearchRecord(o)); } diff --git a/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcherCache.cs b/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcherCache.cs index 849279ff48..1e1f4e65fe 100644 --- a/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcherCache.cs +++ b/Plugins/Wox.Plugin.FindFile/MFTSearch/MFTSearcherCache.cs @@ -71,17 +71,22 @@ namespace Wox.Plugin.FindFile.MFTSearch } } - public List FindByName(string filename) + public List FindByName(string filename, long maxResult = -1) { - filename = filename.ToLower(); - var fileQuery = from filesInVolumeDic in VolumeRecords.Values - from eachFilePair in filesInVolumeDic - where eachFilePair.Value.Name.ToLower().Contains(filename) - select eachFilePair.Value; - List result = new List(); - result.AddRange(fileQuery); + foreach (Dictionary dictionary in VolumeRecords.Values) + { + foreach (var usnRecord in dictionary) + { + if (usnRecord.Value.Name.IndexOf(filename, StringComparison.OrdinalIgnoreCase) >= 0) + { + result.Add(usnRecord.Value); + if (maxResult > 0 && result.Count() >= maxResult) break; + } + if (maxResult > 0 && result.Count() >= maxResult) break; + } + } return result; } diff --git a/Plugins/Wox.Plugin.FindFile/Main.cs b/Plugins/Wox.Plugin.FindFile/Main.cs index 5311191bfc..917712b033 100644 --- a/Plugins/Wox.Plugin.FindFile/Main.cs +++ b/Plugins/Wox.Plugin.FindFile/Main.cs @@ -5,12 +5,13 @@ using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; +using System.Windows.Controls; using Wox.Infrastructure; using Wox.Plugin.FindFile.MFTSearch; namespace Wox.Plugin.FindFile { - public class Main : IPlugin + public class Main : IPlugin, ISettingProvider { private PluginInitContext context; private bool initial = false; @@ -78,27 +79,36 @@ namespace Wox.Plugin.FindFile if (!record.IsFolder) { - contextMenus.Add(new Result() + foreach (ContextMenu contextMenu in FindFileContextMenuStorage.Instance.ContextMenus) { - Title = "Open Containing Folder", - Action = _ => + contextMenus.Add(new Result() { - try + Title = contextMenu.Name, + Action = _ => { - Process.Start("explorer.exe", string.Format("/select, \"{0}\"", record.FullPath)); - } - catch - { - context.API.ShowMsg("Can't open " + record.FullPath, string.Empty, string.Empty); - return false; - } - return true; - }, - IcoPath = "Images/folder.png" - }); + string argument = contextMenu.Argument.Replace("{path}", record.FullPath); + try + { + Process.Start(contextMenu.Command,argument); + } + catch + { + context.API.ShowMsg("Can't start " + record.FullPath, string.Empty, string.Empty); + return false; + } + return true; + }, + IcoPath = "Images/list.png" + }); + } } return contextMenus; } + + public Control CreateSettingPanel() + { + return new Setting(); + } } } diff --git a/Plugins/Wox.Plugin.FindFile/Wox.Plugin.FindFile.csproj b/Plugins/Wox.Plugin.FindFile/Wox.Plugin.FindFile.csproj index 81ecab8d62..0324d2b966 100644 --- a/Plugins/Wox.Plugin.FindFile/Wox.Plugin.FindFile.csproj +++ b/Plugins/Wox.Plugin.FindFile/Wox.Plugin.FindFile.csproj @@ -12,6 +12,8 @@ v3.5 512 + ..\..\ + true true @@ -33,15 +35,36 @@ true + + False + ..\..\packages\log4net.2.0.3\lib\net35-full\log4net.dll + + + False + ..\..\packages\Newtonsoft.Json.6.0.5\lib\net35\Newtonsoft.Json.dll + + + + + ..\..\packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Input.Toolkit.dll + + + ..\..\packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Layout.Toolkit.dll + + + + ..\..\packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll + + @@ -51,6 +74,9 @@ + + Setting.xaml + @@ -72,6 +98,9 @@ Always + + Always + Always @@ -80,11 +109,19 @@ + PreserveNewest + + + Designer + MSBuild:Compile + + +