diff --git a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml
index 4819a2f18d..1cacc4c6a1 100644
--- a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml
+++ b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml
@@ -14,10 +14,6 @@
-
-
-
-
diff --git a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs
index 2fe3f302c2..91bbcbc6d4 100644
--- a/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs
+++ b/Plugins/Wox.Plugin.Program/AddProgramSource.xaml.cs
@@ -17,7 +17,6 @@ namespace Wox.Plugin.Program
{
InitializeComponent();
_settings = settings;
- Suffixes.Text = string.Join(";", settings.ProgramSuffixes);
Directory.Focus();
}
@@ -29,7 +28,6 @@ namespace Wox.Plugin.Program
InitializeComponent();
Directory.Text = _editing.Location;
MaxDepth.Text = _editing.MaxDepth.ToString();
- Suffixes.Text = string.Join(";", _editing.Suffixes);
}
private void BrowseButton_Click(object sender, RoutedEventArgs e)
@@ -56,7 +54,6 @@ namespace Wox.Plugin.Program
{
Location = Directory.Text,
MaxDepth = max,
- Suffixes = Suffixes.Text.Split(ProgramSource.SuffixSeperator),
};
_settings.ProgramSources.Add(source);
}
@@ -64,7 +61,6 @@ namespace Wox.Plugin.Program
{
_editing.Location = Directory.Text;
_editing.MaxDepth = max;
- _editing.Suffixes = Suffixes.Text.Split(ProgramSource.SuffixSeperator);
}
DialogResult = true;
diff --git a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs
index 95853d4628..b8aab05b25 100644
--- a/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs
+++ b/Plugins/Wox.Plugin.Program/FileChangeWatcher.cs
@@ -2,12 +2,24 @@
using System.IO;
using System.Threading.Tasks;
using Wox.Infrastructure.Logger;
+using Wox.Plugin.Program.ProgramSources;
namespace Wox.Plugin.Program
{
internal static class FileChangeWatcher
{
private static readonly List WatchedPath = new List();
+ // todo remove previous watcher events
+ public static void AddAll(List sources, string[] suffixes)
+ {
+ foreach (var s in sources)
+ {
+ if (Directory.Exists(s.Location))
+ {
+ AddWatch(s.Location, suffixes);
+ }
+ }
+ }
public static void AddWatch(string path, string[] programSuffixes, bool includingSubDirectory = true)
{
diff --git a/Plugins/Wox.Plugin.Program/Main.cs b/Plugins/Wox.Plugin.Program/Main.cs
index 463f47016e..b81ba5f654 100644
--- a/Plugins/Wox.Plugin.Program/Main.cs
+++ b/Plugins/Wox.Plugin.Program/Main.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
+using System.IO;
using System.Linq;
using System.Windows.Controls;
using Wox.Infrastructure;
@@ -130,6 +131,7 @@ namespace Wox.Plugin.Program
{
var sources = ProgramSources();
+
var programs = sources.AsParallel()
.SelectMany(s => s.LoadPrograms())
// filter duplicate program
@@ -150,20 +152,31 @@ namespace Wox.Plugin.Program
private static List ProgramSources()
{
- var sources = new List();
+ var fileSystemSource = new List();
if (_settings.EnableStartMenuSource)
{
- sources.Add(new CommonStartMenuProgramSource());
- sources.Add(new UserStartMenuProgramSource());
+ fileSystemSource.Add(new CommonStartMenuProgramSource());
+ fileSystemSource.Add(new UserStartMenuProgramSource());
}
+ fileSystemSource.AddRange(_settings.ProgramSources);
+ FileChangeWatcher.AddAll(fileSystemSource, _settings.ProgramSuffixes);
+ foreach (var s in fileSystemSource)
+ {
+ s.Suffixes = _settings.ProgramSuffixes;
+ }
+
+ var sources = new List();
+ sources.AddRange(fileSystemSource);
if (_settings.EnableRegistrySource)
{
sources.Add(new AppPathsProgramSource());
}
- sources.AddRange(_settings.ProgramSources);
+
return sources;
}
+
+
private static Program ScoreFilter(Program p)
{
var start = new[] { "启动", "start" };
diff --git a/Plugins/Wox.Plugin.Program/ProgramSetting.xaml b/Plugins/Wox.Plugin.Program/ProgramSetting.xaml
index 5711e23835..59f38a3ef9 100644
--- a/Plugins/Wox.Plugin.Program/ProgramSetting.xaml
+++ b/Plugins/Wox.Plugin.Program/ProgramSetting.xaml
@@ -32,13 +32,6 @@
-
-
-
-
-
-
-
diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs
index 718aafd7cc..c2dc3abbe2 100644
--- a/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs
+++ b/Plugins/Wox.Plugin.Program/ProgramSources/FileSystemProgramSource.cs
@@ -11,56 +11,52 @@ namespace Wox.Plugin.Program.ProgramSources
public class FileSystemProgramSource : ProgramSource
{
public string Location { get; set; } = "";
+ public int MaxDepth { get; set; } = -1;
+ internal string[] Suffixes { get; set; } = { "" };
public override List LoadPrograms()
{
- var list = new List();
- if (Directory.Exists(Location))
+ if (Directory.Exists(Location) && MaxDepth >= -1)
{
- GetAppFromDirectory(Location, list);
- FileChangeWatcher.AddWatch(Location, Suffixes);
+ var apps = new List();
+ GetAppFromDirectory(apps, Location, 0);
+ return apps;
+ }
+ else
+ {
+ return new List();
}
- return list;
}
- private void GetAppFromDirectory(string path, List list)
+ private void GetAppFromDirectory(List apps, string path, int depth)
{
- GetAppFromDirectory(path, list, 0);
- }
-
- private void GetAppFromDirectory(string path, List list, int depth)
- {
- if (MaxDepth != -1 && depth > MaxDepth)
- {
- return;
- }
- try
+ if (MaxDepth != depth)
{
foreach (var file in Directory.GetFiles(path))
{
if (Suffixes.Any(o => file.EndsWith("." + o)))
{
- var p = CreateEntry(file);
+ Program p;
+ try
+ {
+ p = CreateEntry(file);
+ }
+ catch (Exception e)
+ {
+ var woxPluginException = new WoxPluginException("Program",
+ $"GetAppFromDirectory failed: {path}", e);
+ Log.Exception(woxPluginException);
+ continue;
+ }
p.Source = this;
- list.Add(p);
+ apps.Add(p);
}
}
-
- foreach (var subDirectory in Directory.GetDirectories(path))
+ foreach (var d in Directory.GetDirectories(path))
{
- GetAppFromDirectory(subDirectory, list, depth + 1);
+ GetAppFromDirectory(apps, d, depth + 1);
}
}
- catch (Exception e)
- {
- var woxPluginException = new WoxPluginException("Program", $"GetAppFromDirectory failed: {path}", e);
- Log.Exception(woxPluginException);
- }
- }
- public override string ToString()
- {
- var display = GetType().Name + Location;
- return display;
}
}
}
\ No newline at end of file
diff --git a/Plugins/Wox.Plugin.Program/ProgramSources/ProgramSource.cs b/Plugins/Wox.Plugin.Program/ProgramSources/ProgramSource.cs
index 0141a321da..4090bf6b3f 100644
--- a/Plugins/Wox.Plugin.Program/ProgramSources/ProgramSource.cs
+++ b/Plugins/Wox.Plugin.Program/ProgramSources/ProgramSource.cs
@@ -8,11 +8,6 @@ namespace Wox.Plugin.Program.ProgramSources
[Serializable]
public abstract class ProgramSource
{
- public const char SuffixSeperator = ';';
-
- // happlebao todo: temp hack for program suffixes
- public string[] Suffixes { get; set; } = {"bat", "appref-ms", "exe", "lnk"};
- public int MaxDepth { get; set; } = -1;
public abstract List LoadPrograms();
diff --git a/Plugins/Wox.Plugin.Program/ProgramSuffixes.xaml.cs b/Plugins/Wox.Plugin.Program/ProgramSuffixes.xaml.cs
index e484ba55ab..2dfe9d37e2 100644
--- a/Plugins/Wox.Plugin.Program/ProgramSuffixes.xaml.cs
+++ b/Plugins/Wox.Plugin.Program/ProgramSuffixes.xaml.cs
@@ -17,7 +17,7 @@ namespace Wox.Plugin.Program
this.context = context;
InitializeComponent();
_settings = settings;
- tbSuffixes.Text = string.Join(ProgramSource.SuffixSeperator.ToString(), _settings.ProgramSuffixes);
+ tbSuffixes.Text = string.Join(Settings.SuffixSeperator.ToString(), _settings.ProgramSuffixes);
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
@@ -29,7 +29,7 @@ namespace Wox.Plugin.Program
return;
}
- _settings.ProgramSuffixes = tbSuffixes.Text.Split(ProgramSource.SuffixSeperator);
+ _settings.ProgramSuffixes = tbSuffixes.Text.Split(Settings.SuffixSeperator);
string msg = context.API.GetTranslation("wox_plugin_program_update_file_suffixes");
MessageBox.Show(msg);
}
diff --git a/Plugins/Wox.Plugin.Program/Settings.cs b/Plugins/Wox.Plugin.Program/Settings.cs
index 6fc052247c..949f9eabe1 100644
--- a/Plugins/Wox.Plugin.Program/Settings.cs
+++ b/Plugins/Wox.Plugin.Program/Settings.cs
@@ -12,5 +12,7 @@ namespace Wox.Plugin.Program
public bool EnableStartMenuSource { get; set; } = true;
public bool EnableRegistrySource { get; set; } = true;
+
+ internal const char SuffixSeperator = ';';
}
}