mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-09 20:57:22 +02:00
Remove suffixes from model
This commit is contained in:
@@ -14,10 +14,6 @@
|
|||||||
<TextBox Name="Directory" VerticalAlignment="Center" Width="238" Margin="0,7" />
|
<TextBox Name="Directory" VerticalAlignment="Center" Width="238" Margin="0,7" />
|
||||||
<Button Name="BrowseButton" Content="{DynamicResource wox_plugin_program_browse}" HorizontalAlignment="Left" VerticalAlignment="Center" Width="75" Click="BrowseButton_Click" />
|
<Button Name="BrowseButton" Content="{DynamicResource wox_plugin_program_browse}" HorizontalAlignment="Left" VerticalAlignment="Center" Width="75" Click="BrowseButton_Click" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<Label Content="{DynamicResource wox_plugin_program_file_suffixes}" />
|
|
||||||
<TextBox x:Name="Suffixes" VerticalAlignment="Center" Width="297" Margin="0,7" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<Label Content="{DynamicResource wox_plugin_program_max_search_depth}" />
|
<Label Content="{DynamicResource wox_plugin_program_max_search_depth}" />
|
||||||
<TextBox Name="MaxDepth" Text="-1" VerticalAlignment="Center" Width="146" Margin="0,7" />
|
<TextBox Name="MaxDepth" Text="-1" VerticalAlignment="Center" Width="146" Margin="0,7" />
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ namespace Wox.Plugin.Program
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
Suffixes.Text = string.Join(";", settings.ProgramSuffixes);
|
|
||||||
Directory.Focus();
|
Directory.Focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,7 +28,6 @@ namespace Wox.Plugin.Program
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Directory.Text = _editing.Location;
|
Directory.Text = _editing.Location;
|
||||||
MaxDepth.Text = _editing.MaxDepth.ToString();
|
MaxDepth.Text = _editing.MaxDepth.ToString();
|
||||||
Suffixes.Text = string.Join(";", _editing.Suffixes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BrowseButton_Click(object sender, RoutedEventArgs e)
|
private void BrowseButton_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -56,7 +54,6 @@ namespace Wox.Plugin.Program
|
|||||||
{
|
{
|
||||||
Location = Directory.Text,
|
Location = Directory.Text,
|
||||||
MaxDepth = max,
|
MaxDepth = max,
|
||||||
Suffixes = Suffixes.Text.Split(ProgramSource.SuffixSeperator),
|
|
||||||
};
|
};
|
||||||
_settings.ProgramSources.Add(source);
|
_settings.ProgramSources.Add(source);
|
||||||
}
|
}
|
||||||
@@ -64,7 +61,6 @@ namespace Wox.Plugin.Program
|
|||||||
{
|
{
|
||||||
_editing.Location = Directory.Text;
|
_editing.Location = Directory.Text;
|
||||||
_editing.MaxDepth = max;
|
_editing.MaxDepth = max;
|
||||||
_editing.Suffixes = Suffixes.Text.Split(ProgramSource.SuffixSeperator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogResult = true;
|
DialogResult = true;
|
||||||
|
|||||||
@@ -2,12 +2,24 @@
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Wox.Infrastructure.Logger;
|
using Wox.Infrastructure.Logger;
|
||||||
|
using Wox.Plugin.Program.ProgramSources;
|
||||||
|
|
||||||
namespace Wox.Plugin.Program
|
namespace Wox.Plugin.Program
|
||||||
{
|
{
|
||||||
internal static class FileChangeWatcher
|
internal static class FileChangeWatcher
|
||||||
{
|
{
|
||||||
private static readonly List<string> WatchedPath = new List<string>();
|
private static readonly List<string> WatchedPath = new List<string>();
|
||||||
|
// todo remove previous watcher events
|
||||||
|
public static void AddAll(List<FileSystemProgramSource> 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)
|
public static void AddWatch(string path, string[] programSuffixes, bool includingSubDirectory = true)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using Wox.Infrastructure;
|
using Wox.Infrastructure;
|
||||||
@@ -130,6 +131,7 @@ namespace Wox.Plugin.Program
|
|||||||
{
|
{
|
||||||
var sources = ProgramSources();
|
var sources = ProgramSources();
|
||||||
|
|
||||||
|
|
||||||
var programs = sources.AsParallel()
|
var programs = sources.AsParallel()
|
||||||
.SelectMany(s => s.LoadPrograms())
|
.SelectMany(s => s.LoadPrograms())
|
||||||
// filter duplicate program
|
// filter duplicate program
|
||||||
@@ -150,20 +152,31 @@ namespace Wox.Plugin.Program
|
|||||||
|
|
||||||
private static List<ProgramSource> ProgramSources()
|
private static List<ProgramSource> ProgramSources()
|
||||||
{
|
{
|
||||||
var sources = new List<ProgramSource>();
|
var fileSystemSource = new List<FileSystemProgramSource>();
|
||||||
if (_settings.EnableStartMenuSource)
|
if (_settings.EnableStartMenuSource)
|
||||||
{
|
{
|
||||||
sources.Add(new CommonStartMenuProgramSource());
|
fileSystemSource.Add(new CommonStartMenuProgramSource());
|
||||||
sources.Add(new UserStartMenuProgramSource());
|
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<ProgramSource>();
|
||||||
|
sources.AddRange(fileSystemSource);
|
||||||
if (_settings.EnableRegistrySource)
|
if (_settings.EnableRegistrySource)
|
||||||
{
|
{
|
||||||
sources.Add(new AppPathsProgramSource());
|
sources.Add(new AppPathsProgramSource());
|
||||||
}
|
}
|
||||||
sources.AddRange(_settings.ProgramSources);
|
|
||||||
return sources;
|
return sources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static Program ScoreFilter(Program p)
|
private static Program ScoreFilter(Program p)
|
||||||
{
|
{
|
||||||
var start = new[] { "启动", "start" };
|
var start = new[] { "启动", "start" };
|
||||||
|
|||||||
@@ -32,13 +32,6 @@
|
|||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</GridViewColumn.CellTemplate>
|
</GridViewColumn.CellTemplate>
|
||||||
</GridViewColumn>
|
</GridViewColumn>
|
||||||
<GridViewColumn Header="{DynamicResource wox_plugin_program_suffixes_header}" Width="220">
|
|
||||||
<GridViewColumn.CellTemplate>
|
|
||||||
<DataTemplate>
|
|
||||||
<TextBlock Text="{Binding Suffixes, ConverterParameter=(null), Converter={program:SuffixesConvert}}"/>
|
|
||||||
</DataTemplate>
|
|
||||||
</GridViewColumn.CellTemplate>
|
|
||||||
</GridViewColumn>
|
|
||||||
<GridViewColumn Header="{DynamicResource wox_plugin_program_max_depth_header}" Width="75">
|
<GridViewColumn Header="{DynamicResource wox_plugin_program_max_depth_header}" Width="75">
|
||||||
<GridViewColumn.CellTemplate>
|
<GridViewColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
|
|||||||
@@ -11,56 +11,52 @@ namespace Wox.Plugin.Program.ProgramSources
|
|||||||
public class FileSystemProgramSource : ProgramSource
|
public class FileSystemProgramSource : ProgramSource
|
||||||
{
|
{
|
||||||
public string Location { get; set; } = "";
|
public string Location { get; set; } = "";
|
||||||
|
public int MaxDepth { get; set; } = -1;
|
||||||
|
internal string[] Suffixes { get; set; } = { "" };
|
||||||
|
|
||||||
public override List<Program> LoadPrograms()
|
public override List<Program> LoadPrograms()
|
||||||
{
|
{
|
||||||
var list = new List<Program>();
|
if (Directory.Exists(Location) && MaxDepth >= -1)
|
||||||
if (Directory.Exists(Location))
|
|
||||||
{
|
{
|
||||||
GetAppFromDirectory(Location, list);
|
var apps = new List<Program>();
|
||||||
FileChangeWatcher.AddWatch(Location, Suffixes);
|
GetAppFromDirectory(apps, Location, 0);
|
||||||
|
return apps;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new List<Program>();
|
||||||
}
|
}
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GetAppFromDirectory(string path, List<Program> list)
|
private void GetAppFromDirectory(List<Program> apps, string path, int depth)
|
||||||
{
|
{
|
||||||
GetAppFromDirectory(path, list, 0);
|
if (MaxDepth != depth)
|
||||||
}
|
|
||||||
|
|
||||||
private void GetAppFromDirectory(string path, List<Program> list, int depth)
|
|
||||||
{
|
|
||||||
if (MaxDepth != -1 && depth > MaxDepth)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
foreach (var file in Directory.GetFiles(path))
|
foreach (var file in Directory.GetFiles(path))
|
||||||
{
|
{
|
||||||
if (Suffixes.Any(o => file.EndsWith("." + o)))
|
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;
|
p.Source = this;
|
||||||
list.Add(p);
|
apps.Add(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
foreach (var d in Directory.GetDirectories(path))
|
||||||
foreach (var subDirectory 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,11 +8,6 @@ namespace Wox.Plugin.Program.ProgramSources
|
|||||||
[Serializable]
|
[Serializable]
|
||||||
public abstract class ProgramSource
|
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<Program> LoadPrograms();
|
public abstract List<Program> LoadPrograms();
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace Wox.Plugin.Program
|
|||||||
this.context = context;
|
this.context = context;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_settings = settings;
|
_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)
|
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
|
||||||
@@ -29,7 +29,7 @@ namespace Wox.Plugin.Program
|
|||||||
return;
|
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");
|
string msg = context.API.GetTranslation("wox_plugin_program_update_file_suffixes");
|
||||||
MessageBox.Show(msg);
|
MessageBox.Show(msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,5 +12,7 @@ namespace Wox.Plugin.Program
|
|||||||
public bool EnableStartMenuSource { get; set; } = true;
|
public bool EnableStartMenuSource { get; set; } = true;
|
||||||
|
|
||||||
public bool EnableRegistrySource { get; set; } = true;
|
public bool EnableRegistrySource { get; set; } = true;
|
||||||
|
|
||||||
|
internal const char SuffixSeperator = ';';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user