mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Fix environment variable expansion logic
This commit is contained in:
parent
4d267fe71e
commit
966d3e752e
3 changed files with 29 additions and 12 deletions
|
|
@ -442,5 +442,22 @@ namespace Flow.Launcher.Test.Plugins
|
|||
// When, Then
|
||||
Assert.IsTrue(hash1 == hash2);
|
||||
}
|
||||
|
||||
[TestCase(@"%appdata%", true)]
|
||||
[TestCase(@"%appdata%\123", true)]
|
||||
[TestCase(@"c:\foo %appdata%\", false)]
|
||||
[TestCase(@"c:\users\%USERNAME%\downloads", true)]
|
||||
[TestCase(@"c:\downloads", false)]
|
||||
[TestCase(@"%", false)]
|
||||
[TestCase(@"%%", false)]
|
||||
[TestCase(@"%bla%blabla%", false)]
|
||||
public void GivenPath_WhenHavingEnvironmentVariableOrNot_ThenShouldBeExpected(string path, bool expectedResult)
|
||||
{
|
||||
// When
|
||||
var result = EnvironmentVariables.HasEnvironmentVar(path);
|
||||
|
||||
// Then
|
||||
Assert.AreEqual(result, expectedResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Explorer.Search
|
||||
|
|
@ -29,9 +30,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
&& EnvStringPaths.Count > 0;
|
||||
}
|
||||
|
||||
internal static bool BeginsWithEnvironmentVar(string search)
|
||||
public static bool HasEnvironmentVar(string search)
|
||||
{
|
||||
return search[0] == '%' && search[1..].Contains("%\\");
|
||||
// "c:\foo %appdata%\" returns false
|
||||
var splited = search.Split(Path.DirectorySeparatorChar);
|
||||
return splited.Any(dir => dir.StartsWith('%') &&
|
||||
dir.EndsWith('%') &&
|
||||
dir.Length > 2 &&
|
||||
dir.Split('%').Length == 3);
|
||||
}
|
||||
|
||||
internal static Dictionary<string, string> LoadEnvironmentStringPaths()
|
||||
|
|
|
|||
|
|
@ -173,18 +173,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
var results = new HashSet<Result>(PathEqualityComparator.Instance);
|
||||
|
||||
var isEnvironmentVariable = EnvironmentVariables.IsEnvironmentVariableSearch(querySearch);
|
||||
|
||||
if (isEnvironmentVariable)
|
||||
if (EnvironmentVariables.IsEnvironmentVariableSearch(querySearch))
|
||||
return EnvironmentVariables.GetEnvironmentStringPathSuggestions(querySearch, query, Context);
|
||||
|
||||
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
|
||||
var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
|
||||
|
||||
var locationPath = querySearch;
|
||||
|
||||
if (isEnvironmentVariablePath)
|
||||
locationPath = Environment.ExpandEnvironmentVariables(locationPath);
|
||||
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\, c:\users\%USERNAME%\downloads
|
||||
var needToExpand = EnvironmentVariables.HasEnvironmentVar(querySearch);
|
||||
var locationPath = needToExpand ? Environment.ExpandEnvironmentVariables(querySearch) : querySearch;
|
||||
|
||||
// Check that actual location exists, otherwise directory search will throw directory not found exception
|
||||
if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath).LocationExists())
|
||||
|
|
|
|||
Loading…
Reference in a new issue