Merge branch 'enable_userselected_programloading' into dev

This commit is contained in:
Jeremy Wu
2019-10-24 13:33:00 +11:00

View File

@@ -275,7 +275,7 @@ namespace Wox.Plugin.Program.Programs
.ToList() .ToList()
.ForEach(x => listToAdd.Add(x)); .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 programs1 = paths.AsParallel().Where(p => Extension(p) == ExeExtension).Select(ExeProgram);
var programs2 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(ExeProgram); var programs2 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(ExeProgram);
@@ -299,6 +299,7 @@ namespace Wox.Plugin.Program.Programs
var paths = toFilter var paths = toFilter
.Where(t1 => !disabledProgramsList.Any(x => x.UniqueIdentifier == t1)) .Where(t1 => !disabledProgramsList.Any(x => x.UniqueIdentifier == t1))
.Select(t1 => t1) .Select(t1 => t1)
.Distinct()
.ToArray(); .ToArray();
var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram); var programs1 = paths.AsParallel().Where(p => Extension(p) == ShortcutExtension).Select(LnkProgram);
@@ -307,7 +308,6 @@ namespace Wox.Plugin.Program.Programs
return programs; return programs;
} }
private static ParallelQuery<Win32> AppPathsPrograms(string[] suffixes) private static ParallelQuery<Win32> AppPathsPrograms(string[] suffixes)
{ {
// https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121 // https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121
@@ -317,14 +317,14 @@ namespace Wox.Plugin.Program.Programs
{ {
if (root != null) if (root != null)
{ {
programs.AddRange(ProgramsFromRegistryKey(root)); programs.AddRange(GetProgramsFromRegistry(root));
} }
} }
using (var root = Registry.CurrentUser.OpenSubKey(appPaths)) using (var root = Registry.CurrentUser.OpenSubKey(appPaths))
{ {
if (root != null) if (root != null)
{ {
programs.AddRange(ProgramsFromRegistryKey(root)); programs.AddRange(GetProgramsFromRegistry(root));
} }
} }
@@ -336,79 +336,54 @@ namespace Wox.Plugin.Program.Programs
return filtered; return filtered;
} }
private static IEnumerable<Win32> ProgramsFromRegistryKey(RegistryKey root) private static IEnumerable<Win32> GetProgramsFromRegistry(RegistryKey root)
{ {
var programs = root.GetSubKeyNames() return root
.Select(subkey => ProgramFromRegistrySubkey(root, subkey)) .GetSubKeyNames()
.Where(p => !string.IsNullOrEmpty(p.Name)); .Select(x => GetProgramPathFromRegistrySubKeys(root, x))
return programs; .Distinct()
.Select(x => GetProgramFromPath(x));
} }
private static Win32 ProgramFromRegistrySubkey(RegistryKey root, string subkey) private static string GetProgramPathFromRegistrySubKeys(RegistryKey root, string subkey)
{ {
var path = string.Empty;
using (var key = root.OpenSubKey(subkey)) using (var key = root.OpenSubKey(subkey))
{ {
if (key != null) if (key == null)
{ return string.Empty;
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 (File.Exists(path)) var defaultValue = string.Empty;
{ path = key.GetValue(defaultValue) as string;
var entry = Win32Program(path);
entry.ExecutableName = subkey;
return entry;
}
else
{
return new Win32();
}
}
else
{
return new Win32();
}
}
else
{
return new Win32();
}
} }
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) private static Win32 GetProgramFromPath(string path)
//{ {
// var start = new[] { "启动", "start" }; if (string.IsNullOrEmpty(path))
// var doc = new[] { "帮助", "help", "文档", "documentation" }; return new Win32();
// var uninstall = new[] { "卸载", "uninstall" };
// var contained = start.Any(s => p.Name.ToLower().Contains(s)); path = Environment.ExpandEnvironmentVariables(path);
// 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;
// }
// 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) public static Win32[] All(Settings settings)
{ {
ParallelQuery<Win32> programs = new List<Win32>().AsParallel(); var programs = new List<Win32>().AsParallel();
var unregistered = UnregisteredPrograms(settings.ProgramSources, settings.ProgramSuffixes); var unregistered = UnregisteredPrograms(settings.ProgramSources, settings.ProgramSuffixes);
programs = programs.Concat(unregistered); programs = programs.Concat(unregistered);
@@ -423,7 +398,7 @@ namespace Wox.Plugin.Program.Programs
var startMenu = StartMenuPrograms(settings.ProgramSuffixes); var startMenu = StartMenuPrograms(settings.ProgramSuffixes);
programs = programs.Concat(startMenu); programs = programs.Concat(startMenu);
} }
//.Select(ScoreFilter);
return programs.ToArray(); return programs.ToArray();
} }
} }