diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs index 0faae15b5..4ed63b7c3 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs @@ -10,40 +10,26 @@ namespace Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo { public class DirectoryInfoSearch { - private PluginInitContext _context; - private Settings _settings; - public DirectoryInfoSearch(Settings settings, PluginInitContext context) + public DirectoryInfoSearch(Settings settings) { - _context = context; _settings = settings; } - internal List DirectoryAllFilesFoldersSearch(Query query, string search) - { - return DirectorySearch(SearchOption.AllDirectories, query, search); - } - internal List TopLevelDirectorySearch(Query query, string search) { - return DirectorySearch(SearchOption.TopDirectoryOnly, query, search); + var criteria = ConstructSearchCriteria(search); + + if (search.IndexOfAny(Constants.SpecialSearchChars) >= 0) + return DirectorySearch(SearchOption.AllDirectories, query, search, criteria); + + return DirectorySearch(SearchOption.TopDirectoryOnly, query, search, criteria); } - private List DirectorySearch(SearchOption searchOption, Query query, string search) + public string ConstructSearchCriteria(string search) { - var results = new List(); - //var hasSpecial = search.IndexOfAny(_specialSearchChars) >= 0; string incompleteName = ""; - //if (hasSpecial || !Directory.Exists(search + "\\")) - //// give the ability to search all folder when starting with > - //if (incompleteName.StartsWith(">")) - //{ - // searchOption = SearchOption.AllDirectories; - - // // match everything before and after search term using supported wildcard '*', ie. *searchterm* - // incompleteName = "*" + incompleteName.Substring(1); - //} if (!search.EndsWith("\\")) { @@ -52,18 +38,36 @@ namespace Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo incompleteName = search.Substring(indexOfSeparator + 1).ToLower(); - search = search.Substring(0, indexOfSeparator + 1); + if (incompleteName.StartsWith(">")) + incompleteName = "*" + incompleteName.Substring(1); } incompleteName += "*"; + return incompleteName; + } + + private List DirectorySearch(SearchOption searchOption, Query query, string search, string searchCriteria) + { + var results = new List(); + + var path = search; + + if (!search.EndsWith("\\")) + { + // not full path, get previous level directory string + var indexOfSeparator = search.LastIndexOf('\\'); + + path = search.Substring(0, indexOfSeparator + 1); + } + var folderList = new List(); var fileList = new List(); try { - var directoryInfo = new System.IO.DirectoryInfo(search); - var fileSystemInfos = directoryInfo.GetFileSystemInfos(incompleteName, searchOption); + var directoryInfo = new System.IO.DirectoryInfo(path); + var fileSystemInfos = directoryInfo.GetFileSystemInfos(searchCriteria, searchOption); foreach (var fileSystemInfo in fileSystemInfos) { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 1bca58366..f4d64157c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -66,7 +66,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search private List DirectoryInfoClassSearch(Query query, string querySearch) { - var directoryInfoSearch = new DirectoryInfoSearch(_settings, _context); + var directoryInfoSearch = new DirectoryInfoSearch(_settings); return directoryInfoSearch.TopLevelDirectorySearch(query, querySearch); }