Skip to content

Commit

Permalink
feat: 允许添加自定义索引目录, 以及自定义排除应用程序的正则表达式
Browse files Browse the repository at this point in the history
  • Loading branch information
SlimeNull committed Jan 19, 2024
1 parent 5e43e4b commit f1bfbb8
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/CurvaLauncher.Plugins.RunApplication/I18n/De.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sys:String x:Key="StrResultCount">Ergebnisanzahl</sys:String>
<sys:String x:Key="StrIndexLocations">Einbezogene Orte</sys:String>
<sys:String x:Key="StrWin32AppDistinctMode">Eindeutiger Modus für Win32-Anwendungen</sys:String>
<sys:String x:Key="StrCustomIndexFolders">Benutzerdefinierte Indexordner</sys:String>
<sys:String x:Key="StrRegexsForExcludingApps">Regexs zum Ausschließen von Apps</sys:String>
</ResourceDictionary>
2 changes: 2 additions & 0 deletions src/CurvaLauncher.Plugins.RunApplication/I18n/EnUs.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sys:String x:Key="StrResultCount">Result count</sys:String>
<sys:String x:Key="StrIndexLocations">Index locations</sys:String>
<sys:String x:Key="StrWin32AppDistinctMode">Win32 application distinct mode</sys:String>
<sys:String x:Key="StrCustomIndexFolders">Custom index folders</sys:String>
<sys:String x:Key="StrRegexsForExcludingApps">Regexs for excluding apps</sys:String>
</ResourceDictionary>
2 changes: 2 additions & 0 deletions src/CurvaLauncher.Plugins.RunApplication/I18n/JaJp.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sys:String x:Key="StrResultCount">結果の数</sys:String>
<sys:String x:Key="StrIndexLocations">インデックスの位置</sys:String>
<sys:String x:Key="StrWin32AppDistinctMode">Win32 アプリケーションの区分モード</sys:String>
<sys:String x:Key="StrCustomIndexFolders">カスタムインデックスフォルダ</sys:String>
<sys:String x:Key="StrRegexsForExcludingApps">アプリを除外するための正規表現</sys:String>
</ResourceDictionary>
2 changes: 2 additions & 0 deletions src/CurvaLauncher.Plugins.RunApplication/I18n/ZhHans.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sys:String x:Key="StrResultCount">结果数量</sys:String>
<sys:String x:Key="StrIndexLocations">索引位置</sys:String>
<sys:String x:Key="StrWin32AppDistinctMode">Win32 应用区分模式</sys:String>
<sys:String x:Key="StrCustomIndexFolders">自定义索引文件夹</sys:String>
<sys:String x:Key="StrRegexsForExcludingApps">排除应用程序的正则表达式</sys:String>
</ResourceDictionary>
2 changes: 2 additions & 0 deletions src/CurvaLauncher.Plugins.RunApplication/I18n/ZhHant.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
<sys:String x:Key="StrResultCount">結果數量</sys:String>
<sys:String x:Key="StrIndexLocations">索引位置</sys:String>
<sys:String x:Key="StrWin32AppDistinctMode">Win32 應用區分模式</sys:String>
<sys:String x:Key="StrCustomFolders">自訂索引資料夾</sys:String>
<sys:String x:Key="StrRegexsForExcludingApps">排除應用程式的正則表示式</sys:String>
</ResourceDictionary>
37 changes: 36 additions & 1 deletion src/CurvaLauncher.Plugins.RunApplication/RunApplicationPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public class RunApplicationPlugin : SyncI18nPlugin
[PluginI18nOption("StrWin32AppDistinctMode")]
public Win32AppDistinctMode Win32AppDistinctMode { get; set; } = Win32AppDistinctMode.FilePath;

[PluginI18nOption("StrCustomIndexFolders", AllowTextMultiline = true)]
public string CustomFolders { get; set; } = string.Empty;

[PluginI18nOption("StrRegexsForExcludingApps")]
public string RegexsForExcludingApps { get; set; } = "^[Uu]ninstall";

public override ImageSource Icon { get; }

public override object NameKey => "StrPluginName";
Expand Down Expand Up @@ -111,11 +117,40 @@ private void InitializeWin32()
Directory.EnumerateFiles(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "*.lnk", SearchOption.TopDirectoryOnly));

if (!string.IsNullOrWhiteSpace(CustomFolders))
{
foreach (string customFolder in CustomFolders.Split('\r', '\n', StringSplitOptions.RemoveEmptyEntries))
{
if (!Directory.Exists(customFolder))
continue;

allShotcutsInStartMenu = allShotcutsInStartMenu.Concat(
Directory.EnumerateFiles(customFolder, "*.lnk", SearchOption.TopDirectoryOnly));
}
}

List<Regex>? regexsForExcludingApps = null;
if (!string.IsNullOrWhiteSpace(RegexsForExcludingApps))
{
regexsForExcludingApps = new();
foreach (string regexStr in RegexsForExcludingApps.Split('\r', '\n', StringSplitOptions.RemoveEmptyEntries))
{
try
{
regexsForExcludingApps.Add(new Regex(regexStr));
}
catch { }
}
}

foreach (var shortcut in allShotcutsInStartMenu)
{
if (GetWin32App(shortcut) is Win32AppInfo newApp &&
!_apps.OfType<Win32AppInfo>().Any(app => app.IsSame(newApp, Win32AppDistinctMode)))
{
if (regexsForExcludingApps != null && regexsForExcludingApps.Any(r => r.IsMatch(newApp.Name)))
continue;

_apps.Add(newApp);
}
}
Expand Down Expand Up @@ -248,7 +283,7 @@ private void Win32AppWatcher_Changed(object sender, FileSystemEventArgs e)
}
else
{
if (e.FullPath.EndsWith(".lnk", StringComparison.OrdinalIgnoreCase) &&
if (e.FullPath.EndsWith(".lnk", StringComparison.OrdinalIgnoreCase) &&
GetWin32App(e.FullPath) is Win32AppInfo newInfo)
_apps.Add(newInfo);
}
Expand Down

0 comments on commit f1bfbb8

Please sign in to comment.