Simplify environment variable detection

This commit is contained in:
Vic 2023-01-19 12:34:36 +08:00
parent 983f0aafc4
commit 009ee3dc5c
2 changed files with 12 additions and 19 deletions

View file

@ -23,12 +23,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search
internal static bool IsEnvironmentVariableSearch(string search)
{
return search.StartsWith("%")
return search.StartsWith("%")
&& search != "%%"
&& !search.Contains("\\")
&& !search.Contains('\\')
&& EnvStringPaths.Count > 0;
}
internal static bool BeginsWithEnvironmentVar(string search)
{
return search[0] == '%' && search[1..].Contains("%\\");
}
internal static Dictionary<string, string> LoadEnvironmentStringPaths()
{
var envStringPaths = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
@ -57,19 +62,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
internal static string TranslateEnvironmentVariablePath(string environmentVariablePath)
{
var splitSearch = environmentVariablePath.Substring(1).Split("%");
var exactEnvStringPath = splitSearch[0];
// if there are more than 2 % characters in the query, don't bother
if (splitSearch.Length == 2 && EnvStringPaths.ContainsKey(exactEnvStringPath))
{
var queryPartToReplace = $"%{exactEnvStringPath}%";
var expandedPath = EnvStringPaths[exactEnvStringPath];
// replace the %envstring% part of the query with its expanded equivalent
return environmentVariablePath.Replace(queryPartToReplace, expandedPath);
}
return environmentVariablePath;
return Environment.ExpandEnvironmentVariables(environmentVariablePath);
}
internal static List<Result> GetEnvironmentStringPathSuggestions(string querySearch, Query query, PluginInitContext context)
@ -86,9 +79,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search
if (EnvStringPaths.ContainsKey(search))
{
var expandedPath = EnvStringPaths[search];
results.Add(ResultManager.CreateFolderResult($"%{search}%", expandedPath, expandedPath, query));
return results;
}
}
@ -101,7 +94,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{
search = search.Substring(1);
}
foreach (var p in EnvStringPaths)
{
if (p.Key.StartsWith(search, StringComparison.InvariantCultureIgnoreCase))

View file

@ -175,7 +175,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
return EnvironmentVariables.GetEnvironmentStringPathSuggestions(querySearch, query, Context);
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
var isEnvironmentVariablePath = querySearch[0] == '%' && querySearch[1..].Contains("%\\");
var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
var locationPath = querySearch;