diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs index 97d8c25d3..c59f05598 100644 --- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs +++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs @@ -1,7 +1,6 @@ using System; using System.Diagnostics; using System.IO; -using System.Windows; namespace Flow.Launcher.Plugin.SharedCommands { @@ -243,16 +242,17 @@ namespace Flow.Launcher.Plugin.SharedCommands } /// - /// Returns if is a sub path of . + /// Returns if contains . /// From https://stackoverflow.com/a/66877016 /// - /// - /// + /// Parent path + /// Sub path + /// If , when and are equal, returns /// - public static bool IsSubPathOf(string subPath, string basePath) + public static bool PathContains(string parentPath, string subPath, bool allowEqual = false) { - var rel = Path.GetRelativePath(basePath, subPath); - return rel != "." + var rel = Path.GetRelativePath(parentPath, subPath); + return (rel != "." || allowEqual) && rel != ".." && !rel.StartsWith("../") && !rel.StartsWith(@"..\") diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 324832990..3a1dc3726 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -121,7 +121,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search } results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any( - excludedPath => FilesFolders.IsSubPathOf(r.SubTitle, excludedPath.Path))); + excludedPath => FilesFolders.PathContains(excludedPath.Path, r.SubTitle))); return results.ToList(); } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 28eb9832f..e0079967b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -470,8 +470,8 @@ namespace Flow.Launcher.Plugin.Program.Programs } var paths = pathEnv.Split(";", StringSplitOptions.RemoveEmptyEntries).DistinctBy(p => p.ToLowerInvariant()); - - var toFilter = paths.Where(x => commonParents.All(parent => !FilesFolders.IsSubPathOf(x, parent))) + + var toFilter = paths.Where(x => commonParents.All(parent => !FilesFolders.PathContains(parent, x))) .AsParallel() .SelectMany(p => EnumerateProgramsInDir(p, suffixes, recursive: false)); @@ -774,8 +774,7 @@ namespace Flow.Launcher.Plugin.Program.Programs HashSet parents = group.ToHashSet(); foreach (var source in group) { - if (parents.Any(p => FilesFolders.IsSubPathOf(source.Location, p.Location) && - source != p)) + if (parents.Any(p => FilesFolders.PathContains(p.Location, source.Location))) { parents.Remove(source); }