diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 9de1bb93c..ef392f920 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -45,24 +45,41 @@ namespace Flow.Launcher.Plugin.Explorer.Search }; } - internal static Result CreateOpenCurrentFolderResult(string incompleteName, string search) + internal static Result CreateOpenCurrentFolderResult(string path, bool isPreviousDirectoryLevel) { - var firstResult = "Open current directory"; - if (incompleteName.Length > 0) - firstResult = "Open " + search; + var folderName = path; - var folderName = search.TrimEnd('\\').Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.None).Last(); + if (folderName.EndsWith(":\\")) + { + var driveLetter = folderName.Substring(0, 1).ToUpper(); + folderName = driveLetter + " drive"; + } + else + { + folderName = folderName.TrimEnd('\\').Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.None).Last(); + } + + var firstResult = ""; + + if (isPreviousDirectoryLevel) + { + firstResult = "Open " + folderName; + } + else + { + firstResult = "Open current directory"; + } return new Result { Title = firstResult, SubTitle = $"Use > to search files and subfolders within {folderName}, " + $"* to search for file extensions in {folderName} or both >* to combine the search", - IcoPath = search, + IcoPath = path, Score = 500, Action = c => { - FilesFolders.OpenPath(search); + FilesFolders.OpenPath(path); return true; } }; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 4bae801b3..155b89831 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -1,4 +1,4 @@ -using Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo; +using Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo; using Flow.Launcher.Plugin.Explorer.Search.QuickFolderLinks; using Flow.Launcher.Plugin.Explorer.Search.WindowsIndex; using Flow.Launcher.Plugin.SharedCommands; @@ -44,9 +44,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search querySearch = EnvironmentVariables.TranslateEnvironmentVariablePath(querySearch); } - if (FilesFolders.IsLocationPathString(querySearch)) - { - return TopLevelFolderSearchBehaviour(WindowsIndexTopLevelFolderSearch, + var results = new List(); + + var currentFolderResult = CreateOpenCurrentFolderResult(FilesFolders.LocationExists, querySearch); + + if (currentFolderResult == null) + return new List(); + + results.Add(currentFolderResult); DirectoryInfoClassSearch, WindowsIndexExists, query, @@ -102,5 +107,28 @@ namespace Flow.Launcher.Plugin.Explorer.Search { return _indexSearch.PathIsIndexed(path); } + + private Result CreateOpenCurrentFolderResult(Func locationExists, string querySearchString) + { + if (locationExists(querySearchString)) + return ResultManager.CreateOpenCurrentFolderResult(querySearchString, false); + + var partialPath = ""; + int index = querySearchString.LastIndexOf('\\'); + if (index > 0 && index < (querySearchString.Length - 1)) + { + partialPath = querySearchString.Substring(0, index + 1); + if (!locationExists(partialPath)) + { + return null; + } + } + else + { + return null; + } + + return ResultManager.CreateOpenCurrentFolderResult(partialPath, true); + } } }