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 0000000000..ab96e07812 Binary files /dev/null and b/Plugins/Wox.Plugin.FindFile/Images/list.png differ 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 + + +