From 41432b4165aea572e211d947ae3779ec56e88a8e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 12:42:35 +1100 Subject: [PATCH 1/6] Remove duplicated programs loading from registry --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 87 +++++++------------- 1 file changed, 31 insertions(+), 56 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 11ec701137..6bfe281a6d 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -338,73 +338,48 @@ namespace Wox.Plugin.Program.Programs private static IEnumerable ProgramsFromRegistryKey(RegistryKey root) { - var programs = root.GetSubKeyNames() - .Select(subkey => ProgramFromRegistrySubkey(root, subkey)) - .Where(p => !string.IsNullOrEmpty(p.Name)); - return programs; + return root + .GetSubKeyNames() + .Select(x => GetProgramRegistryPath(root, x)) + .Distinct() + .Select(x => ProgramFromRegistrySubkey(x)); } - private static Win32 ProgramFromRegistrySubkey(RegistryKey root, string subkey) + private static string GetProgramRegistryPath(RegistryKey root, string subkey) { + var path = string.Empty; + using (var key = root.OpenSubKey(subkey)) { - if (key != null) - { - var defaultValue = string.Empty; - var path = key.GetValue(defaultValue) as string; - if (!string.IsNullOrEmpty(path)) - { - // fix path like this: ""\"C:\\folder\\executable.exe\"" - path = path.Trim('"', ' '); - path = Environment.ExpandEnvironmentVariables(path); + if (key == null) + return string.Empty; - if (File.Exists(path)) - { - var entry = Win32Program(path); - entry.ExecutableName = subkey; - return entry; - } - else - { - return new Win32(); - } - } - else - { - return new Win32(); - } - } - else - { - return new Win32(); - } + var defaultValue = string.Empty; + path = key.GetValue(defaultValue) as string; } + + if (string.IsNullOrEmpty(path)) + return string.Empty; + + // fix path like this: ""\"C:\\folder\\executable.exe\"" + return path = path.Trim('"', ' '); } - //private static Win32 ScoreFilter(Win32 p) - //{ - // var start = new[] { "启动", "start" }; - // var doc = new[] { "帮助", "help", "文档", "documentation" }; - // var uninstall = new[] { "卸载", "uninstall" }; + private static Win32 ProgramFromRegistrySubkey(string path) + { + if (string.IsNullOrEmpty(path)) + return new Win32(); - // var contained = start.Any(s => p.Name.ToLower().Contains(s)); - // if (contained) - // { - // p.Score += 10; - // } - // contained = doc.Any(d => p.Name.ToLower().Contains(d)); - // if (contained) - // { - // p.Score -= 10; - // } - // contained = uninstall.Any(u => p.Name.ToLower().Contains(u)); - // if (contained) - // { - // p.Score -= 20; - // } + path = Environment.ExpandEnvironmentVariables(path); - // return p; - //} + if (!File.Exists(path)) + return new Win32(); + + var entry = Win32Program(path); + entry.ExecutableName = Path.GetFileName(path); + + return entry; + } public static Win32[] All(Settings settings) { From 50896ee23b88dceb85af241dbb2cef8681341060 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 12:51:33 +1100 Subject: [PATCH 2/6] prevent duplication from loading custom program sources --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 6bfe281a6d..87c216bac3 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -275,7 +275,7 @@ namespace Wox.Plugin.Program.Programs .ToList() .ForEach(x => listToAdd.Add(x)); - var paths = listToAdd.ToArray(); + var paths = listToAdd.Distinct().ToArray(); var programs1 = paths.AsParallel().Where(p => Extension(p) == ExeExtension).Select(ExeProgram); var programs2 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(ExeProgram); From 210e21977835103df2d4578d50e5d484da55a5a1 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 12:57:07 +1100 Subject: [PATCH 3/6] rename get program methods --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 87c216bac3..e619662f8e 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -317,14 +317,14 @@ namespace Wox.Plugin.Program.Programs { if (root != null) { - programs.AddRange(ProgramsFromRegistryKey(root)); + programs.AddRange(GetProgramsFromRegistry(root)); } } using (var root = Registry.CurrentUser.OpenSubKey(appPaths)) { if (root != null) { - programs.AddRange(ProgramsFromRegistryKey(root)); + programs.AddRange(GetProgramsFromRegistry(root)); } } @@ -336,16 +336,16 @@ namespace Wox.Plugin.Program.Programs return filtered; } - private static IEnumerable ProgramsFromRegistryKey(RegistryKey root) + private static IEnumerable GetProgramsFromRegistry(RegistryKey root) { return root .GetSubKeyNames() - .Select(x => GetProgramRegistryPath(root, x)) + .Select(x => GetProgramPathFromRegistrySubKeys(root, x)) .Distinct() - .Select(x => ProgramFromRegistrySubkey(x)); + .Select(x => GetProgramFromPath(x)); } - private static string GetProgramRegistryPath(RegistryKey root, string subkey) + private static string GetProgramPathFromRegistrySubKeys(RegistryKey root, string subkey) { var path = string.Empty; @@ -365,7 +365,7 @@ namespace Wox.Plugin.Program.Programs return path = path.Trim('"', ' '); } - private static Win32 ProgramFromRegistrySubkey(string path) + private static Win32 GetProgramFromPath(string path) { if (string.IsNullOrEmpty(path)) return new Win32(); From 217760148c0862367316c78b38dd74ac5024883c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 12:59:47 +1100 Subject: [PATCH 4/6] remove white space --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index e619662f8e..3d7e3fe16c 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -307,7 +307,6 @@ namespace Wox.Plugin.Program.Programs return programs; } - private static ParallelQuery AppPathsPrograms(string[] suffixes) { // https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121 From 4945767bd8b002bfcf457e821e76c070c3c3b575 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 13:31:09 +1100 Subject: [PATCH 5/6] prevent duplication from loading start menu programs --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 3d7e3fe16c..316820c997 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -299,6 +299,7 @@ namespace Wox.Plugin.Program.Programs var paths = toFilter .Where(t1 => !disabledProgramsList.Any(x => x.UniqueIdentifier == t1)) .Select(t1 => t1) + .Distinct() .ToArray(); var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram); From 0eb3a5cab3b2cbb3761ca439082789db8993afd8 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 24 Oct 2019 13:32:12 +1100 Subject: [PATCH 6/6] update --- Plugins/Wox.Plugin.Program/Programs/Win32.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Wox.Plugin.Program/Programs/Win32.cs b/Plugins/Wox.Plugin.Program/Programs/Win32.cs index 316820c997..250d7d4f7f 100644 --- a/Plugins/Wox.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Wox.Plugin.Program/Programs/Win32.cs @@ -383,7 +383,7 @@ namespace Wox.Plugin.Program.Programs public static Win32[] All(Settings settings) { - ParallelQuery programs = new List().AsParallel(); + var programs = new List().AsParallel(); var unregistered = UnregisteredPrograms(settings.ProgramSources, settings.ProgramSuffixes); programs = programs.Concat(unregistered); @@ -397,8 +397,8 @@ namespace Wox.Plugin.Program.Programs { var startMenu = StartMenuPrograms(settings.ProgramSuffixes); programs = programs.Concat(startMenu); - } - //.Select(ScoreFilter); + } + return programs.ToArray(); } }