From fe0153be088d8f82877d7ea06b46364a556c68f5 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Wed, 15 Dec 2021 05:21:40 -0500
Subject: [PATCH 001/118] Initial commit
---
Flow.Launcher/Flow.Launcher.csproj | 33 ++++++++++++
Flow.Launcher/ViewModel/MainViewModel.cs | 65 +++++++++++++++++++++++-
2 files changed, 97 insertions(+), 1 deletion(-)
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index f431504c2e4..117dececf5a 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -77,6 +77,24 @@
Designer
PreserveNewest
+
+ 1
+ 1
+ eab22ac0-30c1-11cf-a7eb-0000c05bae0b
+ 0
+ tlbimp
+ false
+ true
+
+
+ 0
+ 1
+ 50a7e9b0-70ef-11d1-b75a-00a0c90564fe
+ 0
+ tlbimp
+ false
+ true
+
PreserveNewest
@@ -110,6 +128,21 @@
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index abf3a1d14ea..cbe35e0f587 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -20,7 +20,9 @@
using Microsoft.VisualStudio.Threading;
using System.Threading.Channels;
using ISavable = Flow.Launcher.Plugin.ISavable;
-
+using System.Runtime.InteropServices;
+using System.Text;
+using SHDocVw;
namespace Flow.Launcher.ViewModel
{
@@ -720,6 +722,62 @@ private void SetOpenResultModifiers()
OpenResultCommandModifiers = _settings.OpenResultModifiers ?? DefaultOpenResultModifiers;
}
+ private static string GetActiveExplorerPath()
+ {
+ // get the active window
+ IntPtr handle = GetForegroundWindow();
+
+ // Required ref: SHDocVw (Microsoft Internet Controls COM Object) - C:\Windows\system32\ShDocVw.dll
+ ShellWindows shellWindows = new SHDocVw.ShellWindows();
+
+ // loop through all windows
+ foreach (InternetExplorer window in shellWindows)
+ {
+ // match active window
+ if (window.HWND == (int)handle)
+ {
+ // Required ref: Shell32 - C:\Windows\system32\Shell32.dll
+ var shellWindow = window.Document as Shell32.IShellFolderViewDual2;
+
+ // will be null if you are in Internet Explorer for example
+ if (shellWindow != null)
+ {
+ // Item without an index returns the current object
+ var currentFolder = shellWindow.Folder.Items().Item();
+
+ // special folder - use window title
+ // for some reason on "Desktop" gives null
+ if (currentFolder == null || currentFolder.Path.StartsWith("::"))
+ {
+ // Get window title instead
+ const int nChars = 256;
+ StringBuilder Buff = new StringBuilder(nChars);
+ if (GetWindowText(handle, Buff, nChars) > 0)
+ {
+ return Buff.ToString();
+ }
+ }
+ else
+ {
+ return currentFolder.Path;
+ }
+ }
+
+ break;
+ }
+ }
+
+ return null;
+ }
+
+ // COM Imports
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr GetForegroundWindow();
+
+ [DllImport("user32.dll")]
+ static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
+
public void ToggleFlowLauncher()
{
if (!MainWindowVisibilityStatus)
@@ -734,6 +792,9 @@ public void ToggleFlowLauncher()
public void Show()
{
+ string _explorerPath = GetActiveExplorerPath();
+
+ ChangeQueryText($"{_explorerPath}\\>");
if (_settings.UseSound)
{
MediaPlayer media = new MediaPlayer();
@@ -749,6 +810,8 @@ public void Show()
((MainWindow)Application.Current.MainWindow).WindowAnimator();
MainWindowOpacity = 1;
+
+
}
public async void Hide()
From 79a6fda289dfa641e011588f500d98b22425b3d2 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Wed, 15 Dec 2021 05:24:31 -0500
Subject: [PATCH 002/118] Only insert when explorer is active
---
Flow.Launcher/ViewModel/MainViewModel.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index cbe35e0f587..7a48d159fca 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -793,8 +793,11 @@ public void ToggleFlowLauncher()
public void Show()
{
string _explorerPath = GetActiveExplorerPath();
-
- ChangeQueryText($"{_explorerPath}\\>");
+ if (_explorerPath != null)
+ {
+ ChangeQueryText($"{_explorerPath}\\>");
+ }
+
if (_settings.UseSound)
{
MediaPlayer media = new MediaPlayer();
From 1fdaec2648f14994b9b15fc86c732629796f6f13 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Wed, 15 Dec 2021 06:15:05 -0500
Subject: [PATCH 003/118] ChangeQuery after window is visible
---
Flow.Launcher/ViewModel/MainViewModel.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index 7a48d159fca..b525ac34222 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -731,7 +731,7 @@ private static string GetActiveExplorerPath()
ShellWindows shellWindows = new SHDocVw.ShellWindows();
// loop through all windows
- foreach (InternetExplorer window in shellWindows)
+ foreach (SHDocVw.InternetExplorer window in shellWindows)
{
// match active window
if (window.HWND == (int)handle)
@@ -793,10 +793,7 @@ public void ToggleFlowLauncher()
public void Show()
{
string _explorerPath = GetActiveExplorerPath();
- if (_explorerPath != null)
- {
- ChangeQueryText($"{_explorerPath}\\>");
- }
+
if (_settings.UseSound)
{
@@ -813,7 +810,10 @@ public void Show()
((MainWindow)Application.Current.MainWindow).WindowAnimator();
MainWindowOpacity = 1;
-
+ if (_explorerPath != null && _explorerPath != "File Explorer")
+ {
+ ChangeQueryText($"{_explorerPath}\\>");
+ }
}
From 1109f9887e78ddcfda62f0e775893f6161344ec2 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Thu, 16 Dec 2021 02:03:22 -0500
Subject: [PATCH 004/118] Remove unnecessary changes
---
Flow.Launcher/Flow.Launcher.csproj | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index 117dececf5a..9d40427005a 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -128,21 +128,6 @@
-
-
- True
- True
- Settings.settings
-
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
From aa5ca76b180b94680ee4f1f677581eb35bbf7424 Mon Sep 17 00:00:00 2001
From: Garulf <535299+Garulf@users.noreply.github.com>
Date: Mon, 20 Dec 2021 03:34:41 -0500
Subject: [PATCH 005/118] Check window is InternetExplorer type
---
Flow.Launcher/ViewModel/MainViewModel.cs | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index b525ac34222..412af09fdfd 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -731,13 +731,19 @@ private static string GetActiveExplorerPath()
ShellWindows shellWindows = new SHDocVw.ShellWindows();
// loop through all windows
- foreach (SHDocVw.InternetExplorer window in shellWindows)
+ foreach (var window in shellWindows)
{
+ if (window is not SHDocVw.InternetExplorer)
+ {
+ continue;
+ }
+
+ var explorerWindow = (SHDocVw.InternetExplorer)window;
// match active window
- if (window.HWND == (int)handle)
+ if (explorerWindow.HWND == (int)handle)
{
// Required ref: Shell32 - C:\Windows\system32\Shell32.dll
- var shellWindow = window.Document as Shell32.IShellFolderViewDual2;
+ var shellWindow = explorerWindow.Document as Shell32.IShellFolderViewDual2;
// will be null if you are in Internet Explorer for example
if (shellWindow != null)
From c039b17d93c66717dbdaf4a14843ce19a224f5c8 Mon Sep 17 00:00:00 2001
From: stefnotch
Date: Sat, 16 Jul 2022 11:16:00 +0200
Subject: [PATCH 006/118] Refactor file explorer path getting
---
Flow.Launcher/Helper/FileExplorerHelper.cs | 70 ++++++++++++++++++++++
Flow.Launcher/ViewModel/MainViewModel.cs | 66 +-------------------
2 files changed, 72 insertions(+), 64 deletions(-)
create mode 100644 Flow.Launcher/Helper/FileExplorerHelper.cs
diff --git a/Flow.Launcher/Helper/FileExplorerHelper.cs b/Flow.Launcher/Helper/FileExplorerHelper.cs
new file mode 100644
index 00000000000..16152e8306d
--- /dev/null
+++ b/Flow.Launcher/Helper/FileExplorerHelper.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.IO;
+
+namespace Flow.Launcher.Helper
+{
+ public class FileExplorerHelper
+ {
+
+ ///
+ /// Gets the path of the file explorer that is currently in the foreground
+ ///
+ public static string GetActiveExplorerPath()
+ {
+ var explorerWindow = GetActiveExplorer();
+ string locationUrl = explorerWindow.LocationURL;
+ if (!string.IsNullOrEmpty(locationUrl))
+ {
+ return new Uri(locationUrl).LocalPath;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ ///
+ /// Gets the file explorer that is currently in the foreground
+ ///
+ private static SHDocVw.InternetExplorer GetActiveExplorer()
+ {
+ // get the active window
+ IntPtr handle = GetForegroundWindow();
+
+ // Required ref: SHDocVw (Microsoft Internet Controls COM Object) - C:\Windows\system32\ShDocVw.dll
+ var shellWindows = new SHDocVw.ShellWindows();
+
+ // loop through all windows
+ foreach (var window in shellWindows)
+ {
+ if (window is SHDocVw.InternetExplorer explorerWindow && new IntPtr(explorerWindow.HWND) == handle)
+ {
+ // we have found the desired window, now let's make sure that it is indeed a file explorer
+ // we don't want the Internet Explorer or the classic control panel
+ if (explorerWindow.Document is not Shell32.IShellFolderViewDual2)
+ {
+ return null;
+ }
+ if (Path.GetFileName(explorerWindow.FullName) != "explorer.exe")
+ {
+ return null;
+ }
+
+ return explorerWindow;
+ }
+ }
+
+ return null;
+ }
+
+ // COM Imports
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr GetForegroundWindow();
+
+ [DllImport("user32.dll")]
+ static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
+ }
+}
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index 412af09fdfd..ff0c8833931 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -722,68 +722,6 @@ private void SetOpenResultModifiers()
OpenResultCommandModifiers = _settings.OpenResultModifiers ?? DefaultOpenResultModifiers;
}
- private static string GetActiveExplorerPath()
- {
- // get the active window
- IntPtr handle = GetForegroundWindow();
-
- // Required ref: SHDocVw (Microsoft Internet Controls COM Object) - C:\Windows\system32\ShDocVw.dll
- ShellWindows shellWindows = new SHDocVw.ShellWindows();
-
- // loop through all windows
- foreach (var window in shellWindows)
- {
- if (window is not SHDocVw.InternetExplorer)
- {
- continue;
- }
-
- var explorerWindow = (SHDocVw.InternetExplorer)window;
- // match active window
- if (explorerWindow.HWND == (int)handle)
- {
- // Required ref: Shell32 - C:\Windows\system32\Shell32.dll
- var shellWindow = explorerWindow.Document as Shell32.IShellFolderViewDual2;
-
- // will be null if you are in Internet Explorer for example
- if (shellWindow != null)
- {
- // Item without an index returns the current object
- var currentFolder = shellWindow.Folder.Items().Item();
-
- // special folder - use window title
- // for some reason on "Desktop" gives null
- if (currentFolder == null || currentFolder.Path.StartsWith("::"))
- {
- // Get window title instead
- const int nChars = 256;
- StringBuilder Buff = new StringBuilder(nChars);
- if (GetWindowText(handle, Buff, nChars) > 0)
- {
- return Buff.ToString();
- }
- }
- else
- {
- return currentFolder.Path;
- }
- }
-
- break;
- }
- }
-
- return null;
- }
-
- // COM Imports
-
- [DllImport("user32.dll")]
- private static extern IntPtr GetForegroundWindow();
-
- [DllImport("user32.dll")]
- static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
-
public void ToggleFlowLauncher()
{
if (!MainWindowVisibilityStatus)
@@ -798,7 +736,7 @@ public void ToggleFlowLauncher()
public void Show()
{
- string _explorerPath = GetActiveExplorerPath();
+ string _explorerPath = FileExplorerHelper.GetActiveExplorerPath();
if (_settings.UseSound)
@@ -816,7 +754,7 @@ public void Show()
((MainWindow)Application.Current.MainWindow).WindowAnimator();
MainWindowOpacity = 1;
- if (_explorerPath != null && _explorerPath != "File Explorer")
+ if (_explorerPath != null)
{
ChangeQueryText($"{_explorerPath}\\>");
}
From 81bacdb9a72e5482788d2f90933e46659fd4ce42 Mon Sep 17 00:00:00 2001
From: stefnotch
Date: Sat, 16 Jul 2022 11:20:36 +0200
Subject: [PATCH 007/118] Remove unused function
---
Flow.Launcher/Helper/FileExplorerHelper.cs | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Flow.Launcher/Helper/FileExplorerHelper.cs b/Flow.Launcher/Helper/FileExplorerHelper.cs
index 16152e8306d..3b24b741407 100644
--- a/Flow.Launcher/Helper/FileExplorerHelper.cs
+++ b/Flow.Launcher/Helper/FileExplorerHelper.cs
@@ -63,8 +63,5 @@ private static SHDocVw.InternetExplorer GetActiveExplorer()
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
-
- [DllImport("user32.dll")]
- static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
}
}
From ab306d90cc1ef0187b3227c9174d303e846c38fa Mon Sep 17 00:00:00 2001
From: stefnotch
Date: Sat, 16 Jul 2022 11:22:31 +0200
Subject: [PATCH 008/118] Remove unused imports
---
Flow.Launcher/ViewModel/MainViewModel.cs | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index ff0c8833931..d785249a6f7 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -20,9 +20,6 @@
using Microsoft.VisualStudio.Threading;
using System.Threading.Channels;
using ISavable = Flow.Launcher.Plugin.ISavable;
-using System.Runtime.InteropServices;
-using System.Text;
-using SHDocVw;
namespace Flow.Launcher.ViewModel
{
From 1606908d28484c1cc63410be0bbd2ef499730e25 Mon Sep 17 00:00:00 2001
From: stefnotch
Date: Mon, 8 Aug 2022 19:07:18 +0200
Subject: [PATCH 009/118] Move to dynamic
---
Flow.Launcher/Flow.Launcher.csproj | 18 ------------
Flow.Launcher/Helper/FileExplorerHelper.cs | 34 +++++++++-------------
2 files changed, 14 insertions(+), 38 deletions(-)
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index 9d40427005a..f431504c2e4 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -77,24 +77,6 @@
Designer
PreserveNewest
-
- 1
- 1
- eab22ac0-30c1-11cf-a7eb-0000c05bae0b
- 0
- tlbimp
- false
- true
-
-
- 0
- 1
- 50a7e9b0-70ef-11d1-b75a-00a0c90564fe
- 0
- tlbimp
- false
- true
-
PreserveNewest
diff --git a/Flow.Launcher/Helper/FileExplorerHelper.cs b/Flow.Launcher/Helper/FileExplorerHelper.cs
index 3b24b741407..22c3de63ff9 100644
--- a/Flow.Launcher/Helper/FileExplorerHelper.cs
+++ b/Flow.Launcher/Helper/FileExplorerHelper.cs
@@ -14,7 +14,7 @@ public class FileExplorerHelper
public static string GetActiveExplorerPath()
{
var explorerWindow = GetActiveExplorer();
- string locationUrl = explorerWindow.LocationURL;
+ string locationUrl = explorerWindow?.LocationURL;
if (!string.IsNullOrEmpty(locationUrl))
{
return new Uri(locationUrl).LocalPath;
@@ -28,31 +28,25 @@ public static string GetActiveExplorerPath()
///
/// Gets the file explorer that is currently in the foreground
///
- private static SHDocVw.InternetExplorer GetActiveExplorer()
+ private static dynamic GetActiveExplorer()
{
// get the active window
IntPtr handle = GetForegroundWindow();
- // Required ref: SHDocVw (Microsoft Internet Controls COM Object) - C:\Windows\system32\ShDocVw.dll
- var shellWindows = new SHDocVw.ShellWindows();
-
- // loop through all windows
- foreach (var window in shellWindows)
+ Type type = Type.GetTypeFromProgID("Shell.Application");
+ if (type == null) return null;
+ dynamic shell = Activator.CreateInstance(type);
+ var openWindows = shell.Windows();
+ for (int i = 0; i < openWindows.Count; i++)
{
- if (window is SHDocVw.InternetExplorer explorerWindow && new IntPtr(explorerWindow.HWND) == handle)
- {
- // we have found the desired window, now let's make sure that it is indeed a file explorer
- // we don't want the Internet Explorer or the classic control panel
- if (explorerWindow.Document is not Shell32.IShellFolderViewDual2)
- {
- return null;
- }
- if (Path.GetFileName(explorerWindow.FullName) != "explorer.exe")
- {
- return null;
- }
+ var window = openWindows.Item(i);
+ if (window == null) continue;
- return explorerWindow;
+ // find the desired window and make sure that it is indeed a file explorer
+ // we don't want the Internet Explorer or the classic control panel
+ if (Path.GetFileName((string)window.FullName) == "explorer.exe" && new IntPtr(window.HWND) == handle)
+ {
+ return window;
}
}
From 0a062c310a1386d9e7c9bbe4ad59e3927981ea96 Mon Sep 17 00:00:00 2001
From: stefnotch
Date: Mon, 8 Aug 2022 19:19:05 +0200
Subject: [PATCH 010/118] Fix querying of explorer window
---
Flow.Launcher/Helper/FileExplorerHelper.cs | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/Flow.Launcher/Helper/FileExplorerHelper.cs b/Flow.Launcher/Helper/FileExplorerHelper.cs
index 22c3de63ff9..c6d50f514d0 100644
--- a/Flow.Launcher/Helper/FileExplorerHelper.cs
+++ b/Flow.Launcher/Helper/FileExplorerHelper.cs
@@ -44,7 +44,8 @@ private static dynamic GetActiveExplorer()
// find the desired window and make sure that it is indeed a file explorer
// we don't want the Internet Explorer or the classic control panel
- if (Path.GetFileName((string)window.FullName) == "explorer.exe" && new IntPtr(window.HWND) == handle)
+ // ToLower() is needed, because Windows can report the path as "C:\\Windows\\Explorer.EXE"
+ if (Path.GetFileName((string)window.FullName).ToLower() == "explorer.exe" && new IntPtr(window.HWND) == handle)
{
return window;
}
@@ -53,8 +54,6 @@ private static dynamic GetActiveExplorer()
return null;
}
- // COM Imports
-
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
}
From 9b05174a97005bba1997c260c69764efc8049e8a Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 30 Dec 2022 20:56:30 +0800
Subject: [PATCH 011/118] Use localized name for shell link programs
---
.../Programs/ShellLocalization.cs | 92 +++++++++++++++++++
.../Programs/Win32.cs | 20 ++--
2 files changed, 106 insertions(+), 6 deletions(-)
create mode 100644 Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLocalization.cs
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLocalization.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLocalization.cs
new file mode 100644
index 00000000000..4f344d89ecc
--- /dev/null
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLocalization.cs
@@ -0,0 +1,92 @@
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+
+
+namespace Flow.Launcher.Plugin.Program.Programs
+{
+ // From PT Run
+ ///
+ /// Class to get localized name of shell items like 'My computer'. The localization is based on the 'windows display language'.
+ /// Reused code from https://stackoverflow.com/questions/41423491/how-to-get-localized-name-of-known-folder for the method
+ ///
+ public static class ShellLocalization
+ {
+ internal const uint DONTRESOLVEDLLREFERENCES = 0x00000001;
+ internal const uint LOADLIBRARYASDATAFILE = 0x00000002;
+
+ [DllImport("shell32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)]
+ internal static extern int SHGetLocalizedName(string pszPath, StringBuilder pszResModule, ref int cch, out int pidsRes);
+
+ [DllImport("user32.dll", EntryPoint = "LoadStringW", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)]
+ internal static extern int LoadString(IntPtr hModule, int resourceID, StringBuilder resourceValue, int len);
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, EntryPoint = "LoadLibraryExW")]
+ internal static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags);
+
+ [DllImport("kernel32.dll", ExactSpelling = true)]
+ internal static extern int FreeLibrary(IntPtr hModule);
+
+ [DllImport("kernel32.dll", EntryPoint = "ExpandEnvironmentStringsW", CharSet = CharSet.Unicode, ExactSpelling = true)]
+ internal static extern uint ExpandEnvironmentStrings(string lpSrc, StringBuilder lpDst, int nSize);
+
+ ///
+ /// Returns the localized name of a shell item.
+ ///
+ /// Path to the shell item (e. g. shortcut 'File Explorer.lnk').
+ /// The localized name as string or .
+ public static string GetLocalizedName(string path)
+ {
+ StringBuilder resourcePath = new StringBuilder(1024);
+ StringBuilder localizedName = new StringBuilder(1024);
+ int len, id;
+ len = resourcePath.Capacity;
+
+ // If there is no resource to localize a file name the method returns a non zero value.
+ if (SHGetLocalizedName(path, resourcePath, ref len, out id) == 0)
+ {
+ _ = ExpandEnvironmentStrings(resourcePath.ToString(), resourcePath, resourcePath.Capacity);
+ IntPtr hMod = LoadLibraryEx(resourcePath.ToString(), IntPtr.Zero, DONTRESOLVEDLLREFERENCES | LOADLIBRARYASDATAFILE);
+ if (hMod != IntPtr.Zero)
+ {
+ if (LoadString(hMod, id, localizedName, localizedName.Capacity) != 0)
+ {
+ string lString = localizedName.ToString();
+ _ = FreeLibrary(hMod);
+ return lString;
+ }
+
+ _ = FreeLibrary(hMod);
+ }
+ }
+
+ return string.Empty;
+ }
+
+ ///
+ /// This method returns the localized path to a shell item (folder or file)
+ ///
+ /// The path to localize
+ /// The localized path or the original path if localized version is not available
+ public static string GetLocalizedPath(string path)
+ {
+ path = Environment.ExpandEnvironmentVariables(path);
+ string ext = Path.GetExtension(path);
+ var pathParts = path.Split("\\");
+ string[] locPath = new string[pathParts.Length];
+
+ for (int i = 0; i < pathParts.Length; i++)
+ {
+ int iElements = i + 1;
+ string lName = GetLocalizedName(string.Join("\\", pathParts[..iElements]));
+ locPath[i] = !string.IsNullOrEmpty(lName) ? lName : pathParts[i];
+ }
+
+ string newPath = string.Join("\\", locPath);
+ newPath = !newPath.EndsWith(ext, StringComparison.InvariantCultureIgnoreCase) ? newPath + ext : newPath;
+
+ return newPath;
+ }
+ }
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index f8c2206101e..3bbe55d3842 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -44,6 +44,9 @@ public class Win32 : IProgram, IEquatable
public bool Enabled { get; set; }
public string Location => ParentDirectory;
+ // Localized name based on windows display language
+ public string LocalizedName { get; set; } = string.Empty;
+
private const string ShortcutExtension = "lnk";
private const string UrlExtension = "url";
private const string ExeExtension = "exe";
@@ -69,27 +72,30 @@ public Result Result(string query, IPublicAPI api)
string title;
MatchResult matchResult;
+ // Name of the result
+ string resultName = string.IsNullOrEmpty(LocalizedName) ? Name : LocalizedName;
+
// We suppose Name won't be null
- if (!Main._settings.EnableDescription || Description == null || Name.StartsWith(Description))
+ if (!Main._settings.EnableDescription || Description == null || resultName.StartsWith(Description))
{
- title = Name;
+ title = resultName;
matchResult = StringMatcher.FuzzySearch(query, title);
}
- else if (Description.StartsWith(Name))
+ else if (Description.StartsWith(resultName))
{
title = Description;
matchResult = StringMatcher.FuzzySearch(query, Description);
}
else
{
- title = $"{Name}: {Description}";
- var nameMatch = StringMatcher.FuzzySearch(query, Name);
+ title = $"{resultName}: {Description}";
+ var nameMatch = StringMatcher.FuzzySearch(query, resultName);
var desciptionMatch = StringMatcher.FuzzySearch(query, Description);
if (desciptionMatch.Score > nameMatch.Score)
{
for (int i = 0; i < desciptionMatch.MatchData.Count; i++)
{
- desciptionMatch.MatchData[i] += Name.Length + 2; // 2 is ": "
+ desciptionMatch.MatchData[i] += resultName.Length + 2; // 2 is ": "
}
matchResult = desciptionMatch;
}
@@ -297,6 +303,8 @@ private static Win32 LnkProgram(string path)
}
}
+ program.LocalizedName = ShellLocalization.GetLocalizedName(path);
+
return program;
}
catch (COMException e)
From fecb9d38b3bf2d4c9aee78d4fe9c3de053f543a1 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 30 Dec 2022 16:51:26 +0000
Subject: [PATCH 012/118] Bump actions/stale from 4 to 7 (#1737)
---
.github/workflows/stale.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 052e1d225f3..5ec4b82c6e7 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -13,7 +13,7 @@ jobs:
issues: write
pull-requests: write
steps:
- - uses: actions/stale@v4
+ - uses: actions/stale@v7
with:
stale-issue-message: 'This issue is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
days-before-stale: 45
From fdc7da2f7145a8e70a150a8dd8560e48ddec3800 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 00:23:29 +0800
Subject: [PATCH 013/118] Fix typo in file name
---
...tionTranlationHelper.cs => SortOptionTranslationHelper.cs} | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
rename Plugins/Flow.Launcher.Plugin.Explorer/Helper/{SortOptionTranlationHelper.cs => SortOptionTranslationHelper.cs} (98%)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranlationHelper.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranslationHelper.cs
similarity index 98%
rename from Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranlationHelper.cs
rename to Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranslationHelper.cs
index d3a6552d9e5..0a3a2ae43eb 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranlationHelper.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Helper/SortOptionTranslationHelper.cs
@@ -14,7 +14,7 @@ public static string GetTranslatedName(this SortOption sortOption)
const string prefix = "flowlauncher_plugin_everything_sort_by_";
ArgumentNullException.ThrowIfNull(API);
-
+
var enumName = Enum.GetName(sortOption);
var splited = enumName.Split('_');
var name = string.Join('_', splited[..^1]);
@@ -22,4 +22,4 @@ public static string GetTranslatedName(this SortOption sortOption)
return $"{API.GetTranslation(prefix + name.ToLower())} {API.GetTranslation(prefix + direction.ToLower())}";
}
-}
\ No newline at end of file
+}
From be27ef08cf35a8f3e37084619d254391cd1e66d6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 30 Dec 2022 19:14:47 +0200
Subject: [PATCH 014/118] Bump JetBrains.Annotations from 2021.2.0 to 2022.3.1
(#1740)
Bumps [JetBrains.Annotations](https://github.com/JetBrains/JetBrains.Annotations) from 2021.2.0 to 2022.3.1.
- [Release notes](https://github.com/JetBrains/JetBrains.Annotations/releases)
- [Commits](https://github.com/JetBrains/JetBrains.Annotations/commits/v2022.3.1)
---
updated-dependencies:
- dependency-name: JetBrains.Annotations
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
index 571ac2a2344..22c47ae34f1 100644
--- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
+++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
@@ -66,7 +66,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
From 44438de7df855db63a2d6e26e0b1fcd6a973726a Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 30 Dec 2022 23:57:57 +0800
Subject: [PATCH 015/118] Fix typo
---
Flow.Launcher.Core/Configuration/Portable.cs | 6 +++---
Flow.Launcher.Plugin/Result.cs | 2 +-
Flow.Launcher/Languages/da.xaml | 6 +++---
Flow.Launcher/Languages/de.xaml | 6 +++---
Flow.Launcher/Languages/en.xaml | 6 +++---
Flow.Launcher/Languages/es.xaml | 2 +-
Flow.Launcher/Languages/fr.xaml | 6 +++---
Flow.Launcher/Languages/it.xaml | 4 ++--
Flow.Launcher/Languages/ja.xaml | 6 +++---
Flow.Launcher/Languages/ko.xaml | 4 ++--
Flow.Launcher/Languages/nb.xaml | 6 +++---
Flow.Launcher/Languages/nl.xaml | 6 +++---
Flow.Launcher/Languages/pl.xaml | 6 +++---
Flow.Launcher/Languages/pt-br.xaml | 6 +++---
Flow.Launcher/Languages/ru.xaml | 6 +++---
Flow.Launcher/Languages/sk.xaml | 4 ++--
Flow.Launcher/Languages/sr.xaml | 6 +++---
Flow.Launcher/Languages/tr.xaml | 6 +++---
Flow.Launcher/Languages/uk-UA.xaml | 6 +++---
Flow.Launcher/Languages/zh-cn.xaml | 4 ++--
Flow.Launcher/Languages/zh-tw.xaml | 4 ++--
.../Search/DirectoryInfo/DirectoryInfoSearch.cs | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml | 2 +-
.../Languages/es-419.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml | 2 +-
.../Languages/pt-br.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml | 2 +-
.../Languages/uk-UA.xaml | 2 +-
.../Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/da.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/es-419.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/fr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/it.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/ko.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/nb.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/nl.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/sr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 6 +++---
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml | 2 +-
.../Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml | 2 +-
README.md | 4 ++--
74 files changed, 110 insertions(+), 110 deletions(-)
diff --git a/Flow.Launcher.Core/Configuration/Portable.cs b/Flow.Launcher.Core/Configuration/Portable.cs
index bd77ea7cf08..b58154dcb23 100644
--- a/Flow.Launcher.Core/Configuration/Portable.cs
+++ b/Flow.Launcher.Core/Configuration/Portable.cs
@@ -47,7 +47,7 @@ public void DisablePortableMode()
}
catch (Exception e)
{
- Log.Exception("|Portable.DisablePortableMode|Error occured while disabling portable mode", e);
+ Log.Exception("|Portable.DisablePortableMode|Error occurred while disabling portable mode", e);
}
}
@@ -71,7 +71,7 @@ public void EnablePortableMode()
}
catch (Exception e)
{
- Log.Exception("|Portable.EnablePortableMode|Error occured while enabling portable mode", e);
+ Log.Exception("|Portable.EnablePortableMode|Error occurred while enabling portable mode", e);
}
}
@@ -187,7 +187,7 @@ public bool CanUpdatePortability()
if (roamingLocationExists && portableLocationExists)
{
MessageBox.Show(string.Format("Flow Launcher detected your user data exists both in {0} and " +
- "{1}. {2}{2}Please delete {1} in order to proceed. No changes have occured.",
+ "{1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.",
DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine));
return false;
diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs
index dadf220e38e..dc24872f5f0 100644
--- a/Flow.Launcher.Plugin/Result.cs
+++ b/Flow.Launcher.Plugin/Result.cs
@@ -242,7 +242,7 @@ public record PreviewInfo
///
public string PreviewImagePath { get; set; }
///
- /// Determines if the preview image should occupy the full width of the preveiw panel.
+ /// Determines if the preview image should occupy the full width of the preview panel.
///
public bool IsMedia { get; set; }
public string Description { get; set; }
diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml
index ec89377e77f..f8db8420d28 100644
--- a/Flow.Launcher/Languages/da.xaml
+++ b/Flow.Launcher/Languages/da.xaml
@@ -201,7 +201,7 @@
Om
Website
- Github
+ GitHub
Docs
Version
Icons
@@ -262,7 +262,7 @@
Tilpasset søgegenvejstast
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Vis
Genvejstast er utilgængelig, vælg venligst en ny genvejstast
Ugyldig plugin genvejstast
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml
index 2b5d2c1496c..09b800f71b0 100644
--- a/Flow.Launcher/Languages/de.xaml
+++ b/Flow.Launcher/Languages/de.xaml
@@ -201,7 +201,7 @@
Über
Webseite
- Github
+ GitHub
Dokumentation
Version
Icons
@@ -262,7 +262,7 @@
Benutzerdefinierte Abfrage Tastenkombination
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Vorschau
Tastenkombination ist nicht verfügbar, bitte wähle eine andere Tastenkombination
Ungültige Plugin Tastenkombination
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml
index 430bdef2699..b192617cb79 100644
--- a/Flow.Launcher/Languages/en.xaml
+++ b/Flow.Launcher/Languages/en.xaml
@@ -203,7 +203,7 @@
About
Website
- Github
+ GitHub
Docs
Version
Icons
@@ -264,7 +264,7 @@
Custom Query Hotkey
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Preview
Hotkey is unavailable, please select a new hotkey
Invalid plugin hotkey
@@ -338,7 +338,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml
index 49ae75d76be..aa28743990f 100644
--- a/Flow.Launcher/Languages/es.xaml
+++ b/Flow.Launcher/Languages/es.xaml
@@ -262,7 +262,7 @@
Atajo de teclado de consulta personalizada
- Pulse el atajo de teclado personalizado para abrir Flow Laucher y realizar automáticamente la consulta especificada.
+ Pulse el atajo de teclado personalizado para abrir Flow Launcher y realizar automáticamente la consulta especificada.
Vista previa
El atajo de teclado no está disponible, por favor seleccione uno nuevo
Atajo de teclado de complemento no válido
diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml
index ce922b70b55..c700ecaadbd 100644
--- a/Flow.Launcher/Languages/fr.xaml
+++ b/Flow.Launcher/Languages/fr.xaml
@@ -201,7 +201,7 @@
À propos
Website
- Github
+ GitHub
Docs
Version
Icons
@@ -261,7 +261,7 @@
Requêtes personnalisées
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Prévisualiser
Raccourci indisponible. Veuillez en choisir un autre.
Raccourci invalide
@@ -335,7 +335,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml
index 361bc0dcf70..35b624a2a67 100644
--- a/Flow.Launcher/Languages/it.xaml
+++ b/Flow.Launcher/Languages/it.xaml
@@ -201,7 +201,7 @@
Informazioni
Sito web
- Github
+ GitHub
Documentazione
Versione
Icons
@@ -262,7 +262,7 @@
Tasti scelta rapida per ricerche personalizzate
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Anteprima
Tasto di scelta rapida non disponibile, per favore scegli un nuovo tasto di scelta rapida
Tasto di scelta rapida plugin non valido
diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml
index 6bfabf93220..20295f3e1f3 100644
--- a/Flow.Launcher/Languages/ja.xaml
+++ b/Flow.Launcher/Languages/ja.xaml
@@ -201,7 +201,7 @@
Flow Launcherについて
ウェブサイト
- Github
+ GitHub
Docs
バージョン
Icons
@@ -262,7 +262,7 @@
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
プレビュー
ホットキーは使用できません。新しいホットキーを選択してください
プラグインホットキーは無効です
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml
index cfdd8574747..e69e29c8c7c 100644
--- a/Flow.Launcher/Languages/ko.xaml
+++ b/Flow.Launcher/Languages/ko.xaml
@@ -201,7 +201,7 @@
정보
웹사이트
- Github
+ GitHub
문서
버전
아이콘
@@ -262,7 +262,7 @@
사용자지정 쿼리 단축키
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
미리보기
단축키를 사용할 수 없습니다. 다른 단축키를 입력하세요.
플러그인 단축키가 유효하지 않습니다.
diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml
index a247f84d3a9..629624f5ef9 100644
--- a/Flow.Launcher/Languages/nb.xaml
+++ b/Flow.Launcher/Languages/nb.xaml
@@ -201,7 +201,7 @@
About
Website
- Github
+ GitHub
Docs
Version
Icons
@@ -262,7 +262,7 @@
Custom Query Hotkey
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Preview
Hotkey is unavailable, please select a new hotkey
Invalid plugin hotkey
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml
index ab9b3ac0762..4b1c9bb84a8 100644
--- a/Flow.Launcher/Languages/nl.xaml
+++ b/Flow.Launcher/Languages/nl.xaml
@@ -201,7 +201,7 @@
About
Website
- Github
+ GitHub
Docs
Versie
Icons
@@ -262,7 +262,7 @@
Custom Query Sneltoets
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Voorbeeld
Sneltoets is niet beschikbaar, selecteer een nieuwe sneltoets
Ongeldige plugin sneltoets
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml
index ab8e6d001b4..2a9052ca3de 100644
--- a/Flow.Launcher/Languages/pl.xaml
+++ b/Flow.Launcher/Languages/pl.xaml
@@ -201,7 +201,7 @@
O programie
Website
- Github
+ GitHub
Docs
Wersja
Icons
@@ -262,7 +262,7 @@
Skrót klawiszowy niestandardowych zapyta
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Podgląd
Skrót klawiszowy jest niedostępny, musisz podać inny skrót klawiszowy
Niepoprawny skrót klawiszowy
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml
index e6c6ade0bc2..496aea4f340 100644
--- a/Flow.Launcher/Languages/pt-br.xaml
+++ b/Flow.Launcher/Languages/pt-br.xaml
@@ -201,7 +201,7 @@
Sobre
Website
- Github
+ GitHub
Docs
Versão
Icons
@@ -262,7 +262,7 @@
Atalho de Consulta Personalizada
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Prévia
Atalho indisponível, escolha outro
Atalho de plugin inválido
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml
index aa55091be4e..6369fec8a82 100644
--- a/Flow.Launcher/Languages/ru.xaml
+++ b/Flow.Launcher/Languages/ru.xaml
@@ -201,7 +201,7 @@
О Flow Launcher
Website
- Github
+ GitHub
Docs
Версия
Icons
@@ -262,7 +262,7 @@
Задаваемые горячие клавиши для запросов
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Предпросмотр
Горячая клавиша недоступна. Пожалуйста, задайте новую
Недействительная горячая клавиша плагина
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml
index af20a2ee937..fc2df1e19f3 100644
--- a/Flow.Launcher/Languages/sk.xaml
+++ b/Flow.Launcher/Languages/sk.xaml
@@ -201,7 +201,7 @@
O aplikácii
Webstránka
- Github
+ GitHub
Dokumentácia
Verzia
Ikony
@@ -262,7 +262,7 @@
Klávesová skratka vlastného vyhľadávania
- Stlačením vlastnej klávesovej skratky otvoríte Flow Laucher a automaticky vložíte zadaný dotaz.
+ Stlačením vlastnej klávesovej skratky otvoríte Flow Launcher a automaticky vložíte zadaný dotaz.
Náhľad
Klávesová skratka je nedostupná, prosím, zadajte novú skratku
Neplatná klávesová skratka pluginu
diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml
index f621bbf0df4..d747f630b01 100644
--- a/Flow.Launcher/Languages/sr.xaml
+++ b/Flow.Launcher/Languages/sr.xaml
@@ -201,7 +201,7 @@
O Flow Launcher-u
Website
- Github
+ GitHub
Docs
Verzija
Icons
@@ -262,7 +262,7 @@
prečica za ručno dodat upit
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Pregled
Prečica je nedustupna, molim Vas izaberite drugu prečicu
Nepravlna prečica za plugin
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml
index 1f87f8fd6ca..ec3ca684bc3 100644
--- a/Flow.Launcher/Languages/tr.xaml
+++ b/Flow.Launcher/Languages/tr.xaml
@@ -201,7 +201,7 @@
Hakkında
Website
- Github
+ GitHub
Docs
Sürüm
Icons
@@ -262,7 +262,7 @@
Özel Sorgu Kısayolları
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Önizleme
Kısayol tuşu kullanılabilir değil, lütfen başka bir kısayol tuşu seçin
Geçersiz eklenti kısayol tuşu
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml
index e20fa7ca7c6..761396f119f 100644
--- a/Flow.Launcher/Languages/uk-UA.xaml
+++ b/Flow.Launcher/Languages/uk-UA.xaml
@@ -201,7 +201,7 @@
Про Flow Launcher
Website
- Github
+ GitHub
Docs
Версія
Icons
@@ -262,7 +262,7 @@
Задані гарячі клавіші для запитів
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Переглянути
Гаряча клавіша недоступна. Будь ласка, вкажіть нову
Недійсна гаряча клавіша плагіна
@@ -336,7 +336,7 @@
Back / Context Menu
Item Navigation
Open Context Menu
- Open Contaning Folder
+ Open Containing Folder
Run as Admin
Query History
Back to Result in Context Menu
diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml
index 7fb46dd3583..8604bbb1a42 100644
--- a/Flow.Launcher/Languages/zh-cn.xaml
+++ b/Flow.Launcher/Languages/zh-cn.xaml
@@ -201,7 +201,7 @@
关于
官方网站
- Github
+ GitHub
文档
版本
图标
@@ -262,7 +262,7 @@
自定义查询热键
- 输入一个自定义的快捷键来打开 Flow Laucher 并自动输入指定的查询。
+ 输入一个自定义的快捷键来打开 Flow Launcher 并自动输入指定的查询。
预览
热键不可用,请选择一个新的热键
插件热键不合法
diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml
index 7d4f5d94841..b0a75be14ee 100644
--- a/Flow.Launcher/Languages/zh-tw.xaml
+++ b/Flow.Launcher/Languages/zh-tw.xaml
@@ -201,7 +201,7 @@
關於
官方網站
- Github
+ GitHub
文檔
版本
Icons
@@ -262,7 +262,7 @@
自定義快捷鍵查詢
- Press a custom hotkey to open Flow Laucher and input the specified query automatically.
+ Press a custom hotkey to open Flow Launcher and input the specified query automatically.
預覽
快捷鍵不存在,請設定一個新的快捷鍵
外掛熱鍵無法使用
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs
index d24ad898100..df27c3dfaf3 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs
@@ -76,7 +76,7 @@ private static IEnumerable DirectorySearch(EnumerationOptions enum
}
catch (Exception e)
{
- Log.Exception(nameof(DirectoryInfoSearch), "Error occured while searching path", e);
+ Log.Exception(nameof(DirectoryInfoSearch), "Error occurred while searching path", e);
throw;
}
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
index 9915a7b206d..361ce989b87 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
@@ -17,7 +17,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
index f74e6bed324..7fb07a6db6e 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
사용 가능한 업데이트가 없습니다
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
index ca8077bcb98..e1aa21eca3d 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
@@ -15,7 +15,7 @@
Unable to find the plugin.json metadata file from the extracted zip file.
Error: A plugin which has the same or greater version with {0} already exists.
Error installing plugin
- Error occured while trying to install {0}
+ Error occurred while trying to install {0}
No update available
All plugins are up to date
{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
index b9e6dec991d..4d29f765147 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
@@ -171,7 +171,7 @@ internal async Task InstallOrUpdateAsync(UserPlugin plugin)
string.Format(Context.API.GetTranslation("plugin_pluginsmanager_install_error_subtitle"),
plugin.Name));
- Log.Exception("PluginsManager", "An error occured while downloading plugin", e, "InstallOrUpdate");
+ Log.Exception("PluginsManager", "An error occurred while downloading plugin", e, "InstallOrUpdate");
return;
}
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/da.xaml
index 17b86d06e9c..a059b725961 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/da.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/da.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputting the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
index c1fa008d755..92433bf7dac 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
index fb663f1a4b5..a7b8bcb9cc2 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
@@ -81,7 +81,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/es-419.xaml
index b854f808c58..3b1c593fa21 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/es-419.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputting the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/fr.xaml
index d15b8d96bce..dd6187acbd5 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/fr.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputting the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/it.xaml
index a04cdd147b7..e890b69cc1b 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/it.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/it.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputting the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
index baae4c0aefa..bee3b6081f2 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ko.xaml
index 80e0b45726d..bcd03812d9b 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ko.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/nb.xaml
index 9bc50ac9a9e..adb3c14c205 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/nb.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/nl.xaml
index 2f30e1e0f14..9c0376277fd 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/nl.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml
index f1385345a95..3ec2c49c989 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pl.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml
index 2570a83660e..c1852aeb902 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/pt-br.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml
index 0b04f3fc66a..f8d28c5a8bf 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ru.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/sr.xaml
index a81c43ce4a9..a81d64415d4 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/sr.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml
index 44154f0b283..a135434837f 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/tr.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
index 1c37b53a661..c645210fd66 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml
index f0a84a3bc45..1bfa9465efd 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/zh-tw.xaml
@@ -79,7 +79,7 @@
Customized Explorer
Args
- You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is avaliable.
+ You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index d0070f83374..451726f21c5 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -127,7 +127,7 @@ private XmlDocument GetManifestXml()
}
catch (Exception e)
{
- ProgramLogger.LogException("UWP", "GetManifestXml", $"{Location}", "An unexpected error occured and unable to parse AppxManifest.xml", e);
+ ProgramLogger.LogException("UWP", "GetManifestXml", $"{Location}", "An unexpected error occurred and unable to parse AppxManifest.xml", e);
return null;
}
}
@@ -215,7 +215,7 @@ public static Application[] All(Settings settings)
#if !DEBUG
catch (Exception e)
{
- ProgramLogger.LogException($"|UWP|All|{p.InstalledLocation}|An unexpected error occured and unable to convert Package to UWP for {p.Id.FullName}", e);
+ ProgramLogger.LogException($"|UWP|All|{p.InstalledLocation}|An unexpected error occurred and unable to convert Package to UWP for {p.Id.FullName}", e);
return Array.Empty();
}
#endif
@@ -277,7 +277,7 @@ private static IEnumerable CurrentUserPackages()
}
catch (Exception e)
{
- ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{id}", "An unexpected error occured and "
+ ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{id}", "An unexpected error occurred and "
+ $"unable to verify if package is valid", e);
return false;
}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml
index 4d32b7bbcbd..b6b1c6f396d 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml
index 2e4a0c2a953..42b43281259 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
index 0e2b85b9319..1ebd1570b9c 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
@@ -25,7 +25,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml
index f234a180b83..1f75685b243 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml
index 960aa6d5c48..1426855f5b8 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml
index a09f73077f4..af1be478e9c 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml
index edf26dc351a..3713b68d8f0 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml
index 2b34775c554..57f763662a4 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml
index d6059c3711e..8a2f42548c4 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml
index fac64d046f4..fbab8b13930 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
index 6860f8aac65..80a20d32747 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml
index d1838a4d624..199ec35e547 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml
index 8280c129741..fc9bab1047b 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml
index 8de90c8fbbe..8c3d30f360c 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml
index 3d3b0e58e1c..d0142ce43b8 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
index 352d9d7852a..54c76e75fbd 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml
index 78d07a11864..40e789f25b7 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml
@@ -23,7 +23,7 @@
If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads
https://www.netflix.com/search?q=Casino
- Now copy this entrire string and paste it in the URL field below.
+ Now copy this entire string and paste it in the URL field below.
Then replace casino with {q}.
Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q}
diff --git a/README.md b/README.md
index 9861d67b85c..cccbe401b67 100644
--- a/README.md
+++ b/README.md
@@ -242,7 +242,7 @@ And you can download
-### Github
+### GitHub
### Window Walker
@@ -274,7 +274,7 @@ And you can download Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml
index 1e549b4b2b1..052166e28f8 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
Systembefehle
Stellt Systemrelevante Befehle bereit. z.B. herunterfahren, sperren, Einstellungen, usw.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml
index 59fa8161ae5..a9aae930a25 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml
@@ -34,6 +34,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml
index 36fac7cd786..9ada8533bfb 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml
index 4a7910df7c0..c72fcb7f310 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml
@@ -32,6 +32,7 @@
¿Está seguro que desea apagar el equipo?
¿Está seguro que desea reiniciar el equipo?
¿Está seguro que desea reiniciar el equipo con opciones de arranque avanzadas?
+ Are you sure you want to log off?
Comandos del sistema
Proporciona comandos relacionados con el sistema. Por ejemplo, apagar, bloquear, configurar, etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml
index 19b02b55f07..63a68232ad3 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml
index a16c205bf12..fd1a23b9fb9 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
index 3b52196a127..169135a69c0 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
システムコマンド
システム関連のコマンドを提供します。例:シャットダウン、ロック、設定など
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml
index 069b03ba710..dab69b706aa 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml
@@ -32,6 +32,7 @@
시스템을 종료하시겠습니까?
시스템을 재시작 하시겠습니까?
고급 부팅 옵션으로 시스템을 다시 시작하시겠습니까?
+ Are you sure you want to log off?
시스템 명령어
시스템 종료, 컴퓨터 잠금, 설정 등과 같은 시스템 관련 명령어를 제공합니다
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml
index 36fac7cd786..9ada8533bfb 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml
index 943e5e9a781..05e33adef67 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
index bf6f4391c85..f8e857d1c02 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
Komendy systemowe
Wykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml
index 01f990c4e36..72cf8aac29c 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml
index 899af97a99f..76543aa4c83 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml
@@ -32,6 +32,7 @@
Tem certeza de que deseja desligar o computador?
Tem a certeza que deseja reiniciar o computador?
Tem certeza de que deseja reiniciar o computador com as opções avançadas de arranque?
+ Are you sure you want to log off?
Comandos do sistema
Disponibiliza os comandos relacionados com o sistema tais como: desligar, bloquear, reiniciar...
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml
index 36d4108d71c..233754f801e 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml
index 4b729713ea7..c9ed95c3590 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml
@@ -32,6 +32,7 @@
Naozaj chcete počítač vypnúť?
Naozaj chcete počítač reštartovať?
Naozaj chcete počítač reštartovať s pokročilými možnosťami spúšťania?
+ Are you sure you want to log off?
Systémové príkazy
Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml
index 00ba6b79d5e..561811679b6 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml
index 306e1967513..3d847d7fa3d 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml
@@ -32,6 +32,7 @@
Bilgisayarı kapatmak istediğinize emin misiniz?
Bilgisayarı yeniden başlatmak istediğinize emin misiniz?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
Sistem Komutları
Sistem ile ilgili komutlara erişim sağlar. ör. shutdown, lock, settings vb.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
index c9aebe7c025..cf5a3bed418 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
System Commands
Provides System related commands. e.g. shutdown, lock, settings etc.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml
index f120d003482..c1174244a38 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml
@@ -32,6 +32,7 @@
您确定要关机吗?
您确定要重启吗
您确定要以高级启动选项重启计算机吗?
+ Are you sure you want to log off?
系统命令
系统系统相关的命令。例如,关机,锁定,设置等
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml
index ba4c40690a7..09b099bdc93 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml
@@ -32,6 +32,7 @@
Are you sure you want to shut the computer down?
Are you sure you want to restart the computer?
Are you sure you want to restart the computer with Advanced Boot Options?
+ Are you sure you want to log off?
系統命令
系統相關的命令。例如,關機,鎖定,設定等
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
index 1b8ff3cc070..9e4a4ed1cde 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
@@ -152,7 +152,18 @@ private List Commands()
SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_log_off"),
Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe77b"),
IcoPath = "Images\\logoff.png",
- Action = c => ExitWindowsEx(EWX_LOGOFF, 0)
+ Action = c =>
+ {
+ var result = MessageBox.Show(
+ context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_logoff_computer"),
+ context.API.GetTranslation("flowlauncher_plugin_sys_log_off"),
+ MessageBoxButton.YesNo, MessageBoxImage.Warning);
+
+ if (result == MessageBoxResult.Yes)
+ ExitWindowsEx(EWX_LOGOFF, 0);
+
+ return true;
+ }
},
new Result
{
From f19d1d624df172fc0f3081e655c0a50825d538e2 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Sat, 31 Dec 2022 17:23:45 +0930
Subject: [PATCH 017/118] allow plugin name to be searchable by Plugin
Indicator
---
.../Languages/en.xaml | 6 ++-
.../Main.cs | 42 +++++++++----------
.../plugin.json | 2 +-
3 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/en.xaml
index a6176a35f9d..3df1f468d8c 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/en.xaml
@@ -2,7 +2,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
+ Activate {0} plugin action keyword
+
Plugin Indicator
Provides plugins action words suggestions
-
-
\ No newline at end of file
+
+
diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
index b5377eb17ab..b0918d8c736 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
@@ -10,28 +10,26 @@ public class Main : IPlugin, IPluginI18n
public List Query(Query query)
{
- // if query contains more than one word, eg. github tips
- // user has decided to type something else rather than wanting to see the available action keywords
- if (query.SearchTerms.Length > 1)
- return new List();
-
- var results = from keyword in PluginManager.NonGlobalPlugins.Keys
- where keyword.StartsWith(query.Search)
- let metadata = PluginManager.NonGlobalPlugins[keyword].Metadata
- where !metadata.Disabled
- select new Result
- {
- Title = keyword,
- SubTitle = $"Activate {metadata.Name} plugin",
- Score = 100,
- IcoPath = metadata.IcoPath,
- AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}",
- Action = c =>
- {
- context.API.ChangeQuery($"{keyword}{Plugin.Query.TermSeparator}");
- return false;
- }
- };
+ var results =
+ from keyword in PluginManager.NonGlobalPlugins.Keys
+ let metadata = PluginManager.NonGlobalPlugins[keyword].Metadata
+ where (context.API.FuzzySearch(query.Search, keyword).IsSearchPrecisionScoreMet()
+ || context.API.FuzzySearch(query.Search, metadata.Name).IsSearchPrecisionScoreMet()
+ || string.IsNullOrEmpty(query.Search)) // To list all available action keywords
+ && !metadata.Disabled
+ select new Result
+ {
+ Title = keyword,
+ SubTitle = string.Format(context.API.GetTranslation("flowlauncher_plugin_pluginindicator_result_subtitle"), metadata.Name),
+ Score = 100,
+ IcoPath = metadata.IcoPath,
+ AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}",
+ Action = c =>
+ {
+ context.API.ChangeQuery($"{keyword}{Plugin.Query.TermSeparator}");
+ return false;
+ }
+ };
return results.ToList();
}
diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
index fb527e3a8eb..68bf66085ab 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
@@ -4,7 +4,7 @@
"Name": "Plugin Indicator",
"Description": "Provide plugin actionword suggestion",
"Author": "qianlifeng",
- "Version": "2.0.0",
+ "Version": "2.0.1",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll",
From 2bed0f871d2accdcfad0df59b8247d9a0d34cef5 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 30 Dec 2022 21:20:50 +0800
Subject: [PATCH 018/118] Add spell check workflow
---
.github/actions/spelling/README.md | 17 +
.github/actions/spelling/advice.md | 25 +
.github/actions/spelling/allow.txt | 4 +
.github/actions/spelling/candidate.patterns | 522 ++++++++++++++++++
.github/actions/spelling/excludes.txt | 73 +++
.github/actions/spelling/expect.txt | 37 ++
.../actions/spelling/line_forbidden.patterns | 62 +++
.github/actions/spelling/patterns.txt | 110 ++++
.github/actions/spelling/reject.txt | 10 +
.github/workflows/spelling.yml | 158 ++++++
10 files changed, 1018 insertions(+)
create mode 100644 .github/actions/spelling/README.md
create mode 100644 .github/actions/spelling/advice.md
create mode 100644 .github/actions/spelling/allow.txt
create mode 100644 .github/actions/spelling/candidate.patterns
create mode 100644 .github/actions/spelling/excludes.txt
create mode 100644 .github/actions/spelling/expect.txt
create mode 100644 .github/actions/spelling/line_forbidden.patterns
create mode 100644 .github/actions/spelling/patterns.txt
create mode 100644 .github/actions/spelling/reject.txt
create mode 100644 .github/workflows/spelling.yml
diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md
new file mode 100644
index 00000000000..1f699f3de3d
--- /dev/null
+++ b/.github/actions/spelling/README.md
@@ -0,0 +1,17 @@
+# check-spelling/check-spelling configuration
+
+File | Purpose | Format | Info
+-|-|-|-
+[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
+[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
+[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
+[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
+[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
+[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
+[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
+[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
+[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
+[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
+
+Note: you can replace any of these files with a directory by the same name (minus the suffix)
+and then include multiple files inside that directory (with that suffix) to merge multiple files together.
diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md
new file mode 100644
index 00000000000..1004eeaa604
--- /dev/null
+++ b/.github/actions/spelling/advice.md
@@ -0,0 +1,25 @@
+
+If the flagged items are :exploding_head: false positives
+
+If items relate to a ...
+* binary file (or some other file you wouldn't want to check at all).
+
+ Please add a file path to the `excludes.txt` file matching the containing file.
+
+ File paths are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
+
+ `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
+../tree/HEAD/README.md) (on whichever branch you're using).
+
+* well-formed pattern.
+
+ If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
+ try adding it to the `patterns.txt` file.
+
+ Patterns are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
+
+ Note that patterns can't match multiline strings.
+
+
diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt
new file mode 100644
index 00000000000..494d4de9377
--- /dev/null
+++ b/.github/actions/spelling/allow.txt
@@ -0,0 +1,4 @@
+github
+https
+ssh
+ubuntu
diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns
new file mode 100644
index 00000000000..d244bb89133
--- /dev/null
+++ b/.github/actions/spelling/candidate.patterns
@@ -0,0 +1,522 @@
+# marker to ignore all code on line
+^.*/\* #no-spell-check-line \*/.*$
+# marker for ignoring a comment to the end of the line
+// #no-spell-check.*$
+
+# patch hunk comments
+^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .*
+# git index header
+index [0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
+
+# cid urls
+(['"])cid:.*?\g{-1}
+
+# data url in parens
+\(data:[^)]*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\)
+# data url in quotes
+([`'"])data:.*?(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
+# data url
+data:[-a-zA-Z=;:/0-9+]*,\S*
+
+# mailto urls
+mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,}
+
+# magnet urls
+magnet:[?=:\w]+
+
+# magnet urls
+"magnet:[^"]+"
+
+# obs:
+"obs:[^"]*"
+
+# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read
+# In this examples content, I'm using a number of different ways to match things to show various approaches
+# asciinema
+\basciinema\.org/a/[0-9a-zA-Z]+
+
+# apple
+\bdeveloper\.apple\.com/[-\w?=/]+
+# Apple music
+\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+
+
+# appveyor api
+\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
+# appveyor project
+\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+
+
+# Amazon
+
+# Amazon
+\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
+# AWS S3
+\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/%_?:=]*
+# AWS execute-api
+\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b
+# AWS ELB
+\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b
+# AWS SNS
+\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/%_?:=]*
+# AWS VPC
+vpc-\w+
+
+# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
+# YouTube url
+\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
+# YouTube music
+\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*)
+# YouTube tag
+<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
+# YouTube image
+\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
+# Google Accounts
+\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]*
+# Google Analytics
+\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
+# Google APIs
+\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+
+# Google Storage
+\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
+# Google Calendar
+\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
+\w+\@group\.calendar\.google\.com\b
+# Google DataStudio
+\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
+# The leading `/` here is as opposed to the `\b` above
+# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
+# Google Docs
+/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|))
+# Google Drive
+\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]*
+# Google Groups
+\bgroups\.google\.com/(?:(?:forum/#!|d/)(?:msg|topics?|searchin)|a)/[^/\s"]+/[-a-zA-Z0-9$]+(?:/[-a-zA-Z0-9]+)*
+# Google Maps
+\bmaps\.google\.com/maps\?[\w&;=]*
+# Google themes
+themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
+# Google CDN
+\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
+# Goo.gl
+/goo\.gl/[a-zA-Z0-9]+
+# Google Chrome Store
+\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|)
+# Google Books
+\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=.]*
+# Google Fonts
+\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
+# Google Forms
+\bforms\.gle/\w+
+# Google Scholar
+\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+
+# Google Colab Research Drive
+\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]*
+
+# GitHub SHAs (api)
+\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b
+# GitHub SHAs (markdown)
+(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
+# GitHub SHAs
+\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b
+# GitHub wiki
+\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b
+# githubusercontent
+/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
+# githubassets
+\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+)
+# gist github
+\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
+# git.io
+\bgit\.io/[0-9a-zA-Z]+
+# GitHub JSON
+"node_id": "[-a-zA-Z=;:/0-9+]*"
+# Contributor
+\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
+# GHSA
+GHSA(?:-[0-9a-z]{4}){3}
+
+# GitLab commit
+\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
+# GitLab merge requests
+\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b
+# GitLab uploads
+\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]*
+# GitLab commits
+\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b
+
+# binanace
+accounts.binance.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
+
+# bitbucket diff
+\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+
+# bitbucket repositories commits
+\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
+# bitbucket commits
+\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
+
+# bit.ly
+\bbit\.ly/\w+
+
+# bitrise
+\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]*
+
+# bootstrapcdn.com
+\bbootstrapcdn\.com/[-./\w]+
+
+# cdn.cloudflare.com
+\bcdnjs\.cloudflare\.com/[./\w]+
+
+# circleci
+\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+
+
+# gitter
+\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+
+
+# gravatar
+\bgravatar\.com/avatar/[0-9a-f]+
+
+# ibm
+[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]*
+
+# imgur
+\bimgur\.com/[^.]+
+
+# Internet Archive
+\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*)
+
+# discord
+/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
+
+# Disqus
+\bdisqus\.com/[-\w/%.()!?&=_]*
+
+# medium link
+\blink\.medium\.com/[a-zA-Z0-9]+
+# medium
+\bmedium\.com/\@?[^/\s"]+/[-\w]+
+
+# microsoft
+\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
+# powerbi
+\bapp\.powerbi\.com/reportEmbed/[^"' ]*
+# vs devops
+\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
+# microsoft store
+\bmicrosoft\.com/store/apps/\w+
+
+# mvnrepository.com
+\bmvnrepository\.com/[-0-9a-z./]+
+
+# now.sh
+/[0-9a-z-.]+\.now\.sh\b
+
+# oracle
+\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]*
+
+# chromatic.com
+/\S+.chromatic.com\S*[")]
+
+# codacy
+\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+
+
+# compai
+\bcompai\.pub/v1/png/[0-9a-f]+
+
+# mailgun api
+\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]*
+# mailgun
+\b[0-9a-z]+.mailgun.org
+
+# /message-id/
+/message-id/[-\w@./%]+
+
+# Reddit
+\breddit\.com/r/[/\w_]*
+
+# requestb.in
+\brequestb\.in/[0-9a-z]+
+
+# sched
+\b[a-z0-9]+\.sched\.com\b
+
+# Slack url
+slack://[a-zA-Z0-9?&=]+
+# Slack
+\bslack\.com/[-0-9a-zA-Z/_~?&=.]*
+# Slack edge
+\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+
+# Slack images
+\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+
+
+# shields.io
+\bshields\.io/[-\w/%?=&.:+;,]*
+
+# stackexchange -- https://stackexchange.com/feeds/sites
+\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
+
+# Sentry
+[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
+
+# Twitter markdown
+\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
+# Twitter hashtag
+\btwitter\.com/hashtag/[\w?_=&]*
+# Twitter status
+\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
+# Twitter profile images
+\btwimg\.com/profile_images/[_\w./]*
+# Twitter media
+\btwimg\.com/media/[-_\w./?=]*
+# Twitter link shortened
+\bt\.co/\w+
+
+# facebook
+\bfburl\.com/[0-9a-z_]+
+# facebook CDN
+\bfbcdn\.net/[\w/.,]*
+# facebook watch
+\bfb\.watch/[0-9A-Za-z]+
+
+# dropbox
+\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+
+
+# ipfs protocol
+ipfs://[0-9a-z]*
+# ipfs url
+/ipfs/[0-9a-z]*
+
+# w3
+\bw3\.org/[-0-9a-zA-Z/#.]+
+
+# loom
+\bloom\.com/embed/[0-9a-f]+
+
+# regex101
+\bregex101\.com/r/[^/\s"]+/\d+
+
+# figma
+\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+
+
+# freecodecamp.org
+\bfreecodecamp\.org/[-\w/.]+
+
+# image.tmdb.org
+\bimage\.tmdb\.org/[/\w.]+
+
+# mermaid
+\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+
+
+# Wikipedia
+\ben\.wikipedia\.org/wiki/[-\w%.#]+
+
+# gitweb
+[^"\s]+/gitweb/\S+;h=[0-9a-f]+
+
+# HyperKitty lists
+/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/
+
+# lists
+/thread\.html/[^"\s]+
+
+# list-management
+\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+
+
+# kubectl.kubernetes.io/last-applied-configuration
+"kubectl.kubernetes.io/last-applied-configuration": ".*"
+
+# pgp
+\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]*
+
+# Spotify
+\bopen\.spotify\.com/embed/playlist/\w+
+
+# Mastodon
+\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]*
+
+# scastie
+\bscastie\.scala-lang\.org/[^/]+/\w+
+
+# images.unsplash.com
+\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+
+
+# pastebin
+\bpastebin\.com/[\w/]+
+
+# heroku
+\b\w+\.heroku\.com/source/archive/\w+
+
+# quip
+\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)?
+
+# badgen.net
+\bbadgen\.net/badge/[^")\]'\s]+
+
+# statuspage.io
+\w+\.statuspage\.io\b
+
+# media.giphy.com
+\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+
+
+# tinyurl
+\btinyurl\.com/\w+
+
+# getopts
+\bgetopts\s+(?:"[^"]+"|'[^']+')
+
+# ANSI color codes
+(?:\\(?:u00|x)1b|\x1b)\[\d+(?:;\d+|)m
+
+# URL escaped characters
+\%[0-9A-F][A-F]
+# IPv6
+\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
+# c99 hex digits (not the full format, just one I've seen)
+0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP]
+# Punycode
+\bxn--[-0-9a-z]+
+# sha
+sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
+# sha-... -- uses a fancy capture
+(['"]|")[0-9a-f]{40,}\g{-1}
+# hex runs
+\b[0-9a-fA-F]{16,}\b
+# hex in url queries
+=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?&
+# ssh
+(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,}
+
+# PGP
+\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b
+# GPG keys
+\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b
+# Well known gpg keys
+.well-known/openpgpkey/[\w./]+
+
+# uuid:
+\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
+# hex digits including css/html color classes:
+(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
+# integrity
+integrity="sha\d+-[-a-zA-Z=;:/0-9+]{40,}"
+
+# https://www.gnu.org/software/groff/manual/groff.html
+# man troff content
+\\f[BCIPR]
+# '
+\\\(aq
+
+# .desktop mime types
+^MimeTypes?=.*$
+# .desktop localized entries
+^[A-Z][a-z]+\[[a-z]+\]=.*$
+# Localized .desktop content
+Name\[[^\]]+\]=.*
+
+# IServiceProvider
+\bI(?=(?:[A-Z][a-z]{2,})+\b)
+
+# crypt
+"\$2[ayb]\$.{56}"
+
+# scrypt / argon
+\$(?:scrypt|argon\d+[di]*)\$\S+
+
+# Input to GitHub JSON
+content: "[-a-zA-Z=;:/0-9+]*="
+
+# Python stringprefix / binaryprefix
+# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
+(?v#
+(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
+# Compiler flags (Scala)
+(?:^|[\t ,>"'`=(])-J-[DPWXY](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
+# Compiler flags
+(?:^|[\t ,"'`=(])-[DPWXYLlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
+# Compiler flags (linker)
+,-B
+# curl arguments
+\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
+# set arguments
+\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
+# tar arguments
+\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
+# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
+\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
+# macOS temp folders
+/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/
diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
new file mode 100644
index 00000000000..e1d95e7738d
--- /dev/null
+++ b/.github/actions/spelling/excludes.txt
@@ -0,0 +1,73 @@
+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
+(?:^|/)(?i)COPYRIGHT
+(?:^|/)(?i)LICEN[CS]E
+(?:^|/)3rdparty/
+(?:^|/)go\.sum$
+(?:^|/)package(?:-lock|)\.json$
+(?:^|/)vendor/
+\.a$
+\.ai$
+\.avi$
+\.bmp$
+\.bz2$
+\.class$
+\.crt$
+\.dll$
+\.docx?$
+\.drawio$
+\.DS_Store$
+\.eot$
+\.exe$
+\.gif$
+\.gitattributes$
+\.gitignore$
+\.graffle$
+\.gz$
+\.icns$
+\.ico$
+\.jar$
+\.jks$
+\.jpe?g$
+\.key$
+\.lib$
+\.lock$
+\.map$
+\.min\..
+\.mod$
+\.mp[34]$
+\.o$
+\.ocf$
+\.otf$
+\.pdf$
+\.pem$
+\.png$
+\.psd$
+\.pyc$
+\.s$
+\.svgz?$
+\.tar$
+\.tiff?$
+\.ttf$
+\.wav$
+\.webm$
+\.webp$
+\.woff2?$
+\.xlsx?$
+\.zip$
+^\.github/actions/spelling/
+^\Q.github/workflows/spelling.yml\E$
+# Custom
+(?:^|/)Languages/(?!en.xaml)
+Scripts/
+Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/
+Plugins/Flow.Launcher.Plugin.WindowsSettings/WindowsSettings.json
+Plugins/Flow.Launcher.Plugin.WebSearch/setting.json
+(?:^|/)FodyWeavers.xml
+.editorconfig
+ignore$
+\.ps1$
+\.yml$
+\.sln$
+\.csproj$
+\.DotSettings$
+\.targets$
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
new file mode 100644
index 00000000000..ddb4695174f
--- /dev/null
+++ b/.github/actions/spelling/expect.txt
@@ -0,0 +1,37 @@
+crowdin
+DWM
+workflows
+wpf
+actionkeyword
+stackoverflow
+Wox
+flowlauncher
+Fody
+stackoverflow
+IContext
+IShell
+IPlugin
+appveyor
+netflix
+youtube
+appdata
+Prioritise
+Segoe
+Google
+Customise
+UWP
+uwp
+Bokmal
+Bokm
+uninstallation
+uninstalling
+voidtools
+fullscreen
+hotkeys
+totalcmd
+lnk
+amazonaws
+mscorlib
+pythonw
+dotnet
+winget
diff --git a/.github/actions/spelling/line_forbidden.patterns b/.github/actions/spelling/line_forbidden.patterns
new file mode 100644
index 00000000000..7341d9b7363
--- /dev/null
+++ b/.github/actions/spelling/line_forbidden.patterns
@@ -0,0 +1,62 @@
+# reject `m_data` as there's a certain OS which has evil defines that break things if it's used elsewhere
+# \bm_data\b
+
+# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
+# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want
+# to use this:
+#\bfit\(
+
+# s.b. GitHub
+#\bGithub\b
+
+# s.b. GitLab
+\bGitlab\b
+
+# s.b. JavaScript
+\bJavascript\b
+
+# s.b. Microsoft
+\bMicroSoft\b
+
+# s.b. another
+\ban[- ]other\b
+
+# s.b. greater than
+\bgreater then\b
+
+# s.b. into
+\sin to\s
+
+# s.b. opt-in
+\sopt in\s
+
+# s.b. less than
+\bless then\b
+
+# s.b. otherwise
+\bother[- ]wise\b
+
+# s.b. nonexistent
+\bnon existing\b
+\b[Nn]o[nt][- ]existent\b
+
+# s.b. preexisting
+[Pp]re[- ]existing
+
+# s.b. preempt
+[Pp]re[- ]empt\b
+
+# s.b. preemptively
+[Pp]re[- ]emptively
+
+# s.b. reentrancy
+[Rr]e[- ]entrancy
+
+# s.b. reentrant
+[Rr]e[- ]entrant
+
+# s.b. workaround(s)
+\bwork[- ]arounds?\b
+
+# Reject duplicate words
+\s([A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})\s\g{-1}\s
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
new file mode 100644
index 00000000000..73095a63829
--- /dev/null
+++ b/.github/actions/spelling/patterns.txt
@@ -0,0 +1,110 @@
+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
+
+# Questionably acceptable forms of `in to`
+# Personally, I prefer `log into`, but people object
+# https://www.tprteaching.com/log-into-log-in-to-login/
+\b[Ll]og in to\b
+
+# acceptable duplicates
+# ls directory listings
+[-bcdlpsw](?:[-r][-w][-sx]){3}\s+\d+\s+(\S+)\s+\g{-1}\s+\d+\s+
+# C types and repeated CSS values
+\s(center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?: \g{-1})+\s
+# go templates
+\s(\w+)\s+\g{-1}\s+\`(?:graphql|json|yaml):
+# javadoc / .net
+(?:[\\@](?:groupname|param)|(?:public|private)(?:\s+static|\s+readonly)*)\s+(\w+)\s+\g{-1}\s
+
+# Commit message -- Signed-off-by and friends
+^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$
+
+# Autogenerated revert commit message
+^This reverts commit [0-9a-f]{40}\.$
+
+# ignore long runs of a single character:
+\b([A-Za-z])\g{-1}{3,}\b
+
+# Automatically suggested patterns
+# hit-count: 360 file-count: 108
+# IServiceProvider
+\bI(?=(?:[A-Z][a-z]{2,})+\b)
+
+# hit-count: 297 file-count: 18
+# uuid:
+\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
+
+# hit-count: 138 file-count: 27
+# hex digits including css/html color classes:
+(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|u\d+)\b
+
+# hit-count: 93 file-count: 28
+# hex runs
+\b[0-9a-fA-F]{16,}\b
+
+# hit-count: 52 file-count: 3
+# githubusercontent
+/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
+
+/[-a-z0-9]+\.github\.com/[-a-zA-Z0-9?&=_\/.]*
+
+# hit-count: 24 file-count: 12
+# GitHub SHAs (markdown)
+(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
+
+# hit-count: 11 file-count: 10
+# stackexchange -- https://stackexchange.com/feeds/sites
+\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
+
+# hit-count: 11 file-count: 8
+# microsoft
+\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
+
+# hit-count: 2 file-count: 2
+# Twitter status
+\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
+
+# hit-count: 2 file-count: 1
+# discord
+/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
+
+# hit-count: 1 file-count: 1
+# appveyor api
+\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
+
+# hit-count: 1 file-count: 1
+# gist github
+\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
+
+# Automatically suggested patterns
+# hit-count: 21 file-count: 21
+# w3
+\bw3\.org/[-0-9a-zA-Z/#.]+
+
+# hit-count: 6 file-count: 1
+# shields.io
+\bshields\.io/[-\w/%?=&.:+;,]*
+
+# hit-count: 3 file-count: 2
+# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
+# YouTube url
+\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
+
+# hit-count: 2 file-count: 2
+# Google Maps
+\bmaps\.google\.com/maps\?[\w&;=]*
+
+# hit-count: 2 file-count: 2
+# Contributor
+\[[^\]]+\]\(https://github\.com/[^/\s"]+\)
+
+# hit-count: 2 file-count: 1
+# URL escaped characters
+\%[0-9A-F][A-F]
+
+# hit-count: 1 file-count: 1
+# Compiler flags
+(?:^|[\t ,"'`=(])-[DPWXYLlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
+
+# Localization keys
+#x:Key="[^"]+"
+#{DynamicResource [^"]+}
diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt
new file mode 100644
index 00000000000..b5a6d36809f
--- /dev/null
+++ b/.github/actions/spelling/reject.txt
@@ -0,0 +1,10 @@
+^attache$
+benefitting
+occurences?
+^dependan.*
+^oer$
+Sorce
+^[Ss]pae.*
+^untill$
+^untilling$
+^wether.*
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
new file mode 100644
index 00000000000..125eee53a8b
--- /dev/null
+++ b/.github/workflows/spelling.yml
@@ -0,0 +1,158 @@
+name: Check Spelling
+
+# Comment management is handled through a secondary job, for details see:
+# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
+#
+# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
+# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare)
+# it needs `contents: write` in order to add a comment.
+#
+# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
+# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
+# it needs `pull-requests: write` in order to manipulate those comments.
+
+# Updating pull request branches is managed via comment handling.
+# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
+#
+# These elements work together to make it happen:
+#
+# `on.issue_comment`
+# This event listens to comments by users asking to update the metadata.
+#
+# `jobs.update`
+# This job runs in response to an issue_comment and will push a new commit
+# to update the spelling metadata.
+#
+# `with.experimental_apply_changes_via_bot`
+# Tells the action to support and generate messages that enable it
+# to make a commit to update the spelling metadata.
+#
+# `with.ssh_key`
+# In order to trigger workflows when the commit is made, you can provide a
+# secret (typically, a write-enabled github deploy key).
+#
+# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
+
+on:
+ push:
+ branches:
+ - '**'
+ - '!l10n_dev'
+ tags-ignore:
+ - "**"
+ pull_request_target:
+ branches:
+ - '**'
+ # - '!l10n_dev'
+ tags-ignore:
+ - "**"
+ types:
+ - 'opened'
+ - 'reopened'
+ - 'synchronize'
+ # issue_comment:
+ # types:
+ # - 'created'
+
+jobs:
+ spelling:
+ name: Check Spelling
+ permissions:
+ contents: read
+ pull-requests: read
+ actions: read
+ security-events: write
+ outputs:
+ followup: ${{ steps.spelling.outputs.followup }}
+ runs-on: ubuntu-latest
+ if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
+ concurrency:
+ group: spelling-${{ github.event.pull_request.number || github.ref }}
+ # note: If you use only_check_changed_files, you do not want cancel-in-progress
+ cancel-in-progress: true
+ steps:
+ - name: check-spelling
+ id: spelling
+ uses: check-spelling/check-spelling@main
+ with:
+ suppress_push_for_open_pull_request: 1
+ checkout: true
+ check_file_names: 1
+ spell_check_this: check-spelling/spell-check-this@main
+ post_comment: 0
+ use_magic_file: 1
+ experimental_apply_changes_via_bot: 1
+ use_sarif: true # to show in pr page
+ extra_dictionary_limit: 10
+ check_commit_messages: commits title description
+ only_check_changed_files: false
+ check_extra_dictionaries: ''
+ quit_without_error: true
+ extra_dictionaries:
+ cspell:software-terms/src/software-terms.txt
+ cspell:win32/src/win32.txt
+ cspell:php/php.txt
+ cspell:filetypes/filetypes.txt
+ cspell:csharp/csharp.txt
+ cspell:dotnet/dotnet.txt
+ cspell:python/src/python/python-lib.txt
+ warnings:
+ binary-file,deprecated-feature,large-file,limited-references,noisy-file,non-alpha-in-dictionary,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,unrecognized-spelling,no-newline-at-eof
+
+
+
+ comment-push:
+ name: Report (Push)
+ # If your workflow isn't running on push, you can remove this job
+ runs-on: ubuntu-latest
+ needs: spelling
+ permissions:
+ contents: write
+ if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
+ steps:
+ - name: comment
+ uses: check-spelling/check-spelling@main
+ with:
+ checkout: true
+ spell_check_this: check-spelling/spell-check-this@main
+ task: ${{ needs.spelling.outputs.followup }}
+
+ comment-pr:
+ name: Report (PR)
+ # If you workflow isn't running on pull_request*, you can remove this job
+ runs-on: ubuntu-latest
+ needs: spelling
+ permissions:
+ pull-requests: write
+ if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
+ steps:
+ - name: comment
+ uses: check-spelling/check-spelling@main
+ with:
+ checkout: true
+ spell_check_this: check-spelling/spell-check-this@main
+ task: ${{ needs.spelling.outputs.followup }}
+ experimental_apply_changes_via_bot: 1
+
+ # update:
+ # name: Update PR
+ # permissions:
+ # contents: write
+ # pull-requests: write
+ # actions: read
+ # runs-on: ubuntu-latest
+ # if: ${{
+ # github.event_name == 'issue_comment' &&
+ # github.event.issue.pull_request &&
+ # contains(github.event.comment.body, '@check-spelling-bot apply')
+ # }}
+ # concurrency:
+ # group: spelling-update-${{ github.event.issue.number }}
+ # cancel-in-progress: false
+ # steps:
+ # - name: apply spelling updates
+ # uses: check-spelling/check-spelling@main
+ # with:
+ # experimental_apply_changes_via_bot: 1
+ # checkout: true
+ # ssh_key: "${{ secrets.CHECK_SPELLING }}"
From c6ff0a51131250b11743e9d9ce1d4ad53515dc76 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 17:49:38 +0800
Subject: [PATCH 019/118] Fix .lnk description logic
---
.../Flow.Launcher.Plugin.Program/Programs/Win32.cs | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 3bbe55d3842..4d3aecf5879 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -273,14 +273,13 @@ private static Win32 LnkProgram(string path)
ShellLinkHelper _helper = new ShellLinkHelper();
string target = _helper.retrieveTargetPath(path);
- if (!string.IsNullOrEmpty(target))
+ if (!string.IsNullOrEmpty(target) && File.Exists(target))
{
- var extension = Extension(target);
- if (extension == ExeExtension && File.Exists(target))
- {
- program.LnkResolvedPath = Path.GetFullPath(target);
- program.ExecutableName = Path.GetFileName(target);
+ program.LnkResolvedPath = Path.GetFullPath(target);
+ program.ExecutableName = Path.GetFileName(target);
+ if (Extension(target) == ExeExtension)
+ {
var args = _helper.arguments;
if(!string.IsNullOrEmpty(args))
{
From 207b29f816385408e3a4e72427d59db7a30eb0cb Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 17:42:42 +0800
Subject: [PATCH 020/118] Update comments
---
Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 4d3aecf5879..6b245d2c48a 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -30,14 +30,17 @@ public class Win32 : IProgram, IEquatable
///
public string FullPath { get; set; }
///
- /// Path of the excutable for .lnk, or the URL for .url. Arguments are included if any.
+ /// Path of the executable for .lnk, or the URL for .url. Arguments are included if any.
///
public string LnkResolvedPath { get; set; }
///
- /// Path of the actual executable file.
+ /// Path of the actual executable file. Args are included.
///
public string ExecutablePath => LnkResolvedPath ?? FullPath;
public string ParentDirectory { get; set; }
+ ///
+ /// Name of the executable for .lnk files
+ ///
public string ExecutableName { get; set; }
public string Description { get; set; }
public bool Valid { get; set; }
@@ -584,7 +587,6 @@ public static IEnumerable DistinctBy(IEnumerable source, Func
private static IEnumerable ProgramsHasher(IEnumerable programs)
{
- // TODO: Unable to distinguish multiple lnks to the same excutable but with different params
return programs.GroupBy(p => p.ExecutablePath.ToLowerInvariant())
.AsParallel()
.SelectMany(g =>
From e6b8a0dde2b477e53585a66cbf6469e269408217 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 21:02:27 +0800
Subject: [PATCH 021/118] Catch exception in ShellLinkHelper
---
.../Programs/ShellLinkHelper.cs | 17 ++++++++++++++---
.../Programs/Win32.cs | 9 ---------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLinkHelper.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLinkHelper.cs
index b93fb23c989..78c66d60485 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLinkHelper.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/ShellLinkHelper.cs
@@ -3,6 +3,7 @@
using System.Runtime.InteropServices;
using Accessibility;
using System.Runtime.InteropServices.ComTypes;
+using Flow.Launcher.Plugin.Program.Logger;
namespace Flow.Launcher.Plugin.Program.Programs
{
@@ -119,9 +120,19 @@ public string retrieveTargetPath(string path)
// To set the app description
if (!String.IsNullOrEmpty(target))
{
- buffer = new StringBuilder(MAX_PATH);
- ((IShellLinkW)link).GetDescription(buffer, MAX_PATH);
- description = buffer.ToString();
+ try
+ {
+ buffer = new StringBuilder(MAX_PATH);
+ ((IShellLinkW)link).GetDescription(buffer, MAX_PATH);
+ description = buffer.ToString();
+ }
+ catch (COMException e)
+ {
+ // C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\MiracastView.lnk always cause exception
+ ProgramLogger.LogException($"|IShellLinkW|retrieveTargetPath|{path}" +
+ "|Error caused likely due to trying to get the description of the program",
+ e);
+ }
buffer.Clear();
((IShellLinkW)link).GetArguments(buffer, MAX_PATH);
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 6b245d2c48a..019048295ef 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -309,15 +309,6 @@ private static Win32 LnkProgram(string path)
return program;
}
- catch (COMException e)
- {
- // C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\MiracastView.lnk always cause exception
- ProgramLogger.LogException($"|Win32|LnkProgram|{path}" +
- "|Error caused likely due to trying to get the description of the program",
- e);
-
- return Default;
- }
catch (FileNotFoundException e)
{
ProgramLogger.LogException($"|Win32|LnkProgram|{path}" +
From 617183b14a9c57d0966d6fbc3eda0e5b3d2d00be Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 17:59:46 +0800
Subject: [PATCH 022/118] Refactor result matching logic
---
.../Programs/Win32.cs | 96 ++++++++++++++-----
1 file changed, 74 insertions(+), 22 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 019048295ef..fafe7d5bfff 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -69,6 +69,29 @@ public class Win32 : IProgram, IEquatable
Enabled = false
};
+ private static MatchResult Match(string query, List candidates)
+ {
+ if (candidates.Count == 0)
+ return null;
+
+ List matches = new List();
+ foreach(var candidate in candidates)
+ {
+ var match = StringMatcher.FuzzySearch(query, candidate);
+ if (match.IsSearchPrecisionScoreMet())
+ {
+ matches.Add(match);
+ }
+ }
+ if (matches.Count == 0)
+ {
+ return null;
+ }
+ else
+ {
+ return matches.MaxBy(match => match.Score);
+ }
+ }
public Result Result(string query, IPublicAPI api)
{
@@ -76,44 +99,73 @@ public Result Result(string query, IPublicAPI api)
MatchResult matchResult;
// Name of the result
- string resultName = string.IsNullOrEmpty(LocalizedName) ? Name : LocalizedName;
+ // Check equality to avoid matching again in candidates
+ bool useLocalizedName = !string.IsNullOrEmpty(LocalizedName) && !Name.Equals(LocalizedName);
+ string resultName = useLocalizedName ? LocalizedName : Name;
- // We suppose Name won't be null
- if (!Main._settings.EnableDescription || Description == null || resultName.StartsWith(Description))
+ if (!Main._settings.EnableDescription)
{
title = resultName;
- matchResult = StringMatcher.FuzzySearch(query, title);
- }
- else if (Description.StartsWith(resultName))
- {
- title = Description;
- matchResult = StringMatcher.FuzzySearch(query, Description);
+ matchResult = StringMatcher.FuzzySearch(query, resultName);
}
else
{
- title = $"{resultName}: {Description}";
- var nameMatch = StringMatcher.FuzzySearch(query, resultName);
- var desciptionMatch = StringMatcher.FuzzySearch(query, Description);
- if (desciptionMatch.Score > nameMatch.Score)
+ if (string.IsNullOrEmpty(Description) || resultName.StartsWith(Description))
{
- for (int i = 0; i < desciptionMatch.MatchData.Count; i++)
+ // Description is invalid or included in resultName
+ // Description is always localized, so Name.StartsWith(Description) is generally useless
+ title = resultName;
+ matchResult = StringMatcher.FuzzySearch(query, resultName);
+ }
+ else if (Description.StartsWith(resultName))
+ {
+ // resultName included in Description
+ title = Description;
+ matchResult = StringMatcher.FuzzySearch(query, Description);
+ }
+ else
+ {
+ // Search in both
+ title = $"{resultName}: {Description}";
+ var nameMatch = StringMatcher.FuzzySearch(query, resultName);
+ var descriptionMatch = StringMatcher.FuzzySearch(query, Description);
+ if (descriptionMatch.Score > nameMatch.Score)
+ {
+ for (int i = 0; i < descriptionMatch.MatchData.Count; i++)
+ {
+ descriptionMatch.MatchData[i] += resultName.Length + 2; // 2 is ": "
+ }
+ matchResult = descriptionMatch;
+ }
+ else
{
- desciptionMatch.MatchData[i] += resultName.Length + 2; // 2 is ": "
+ matchResult = nameMatch;
}
- matchResult = desciptionMatch;
}
- else matchResult = nameMatch;
}
+ List candidates = new List();
+
if (!matchResult.IsSearchPrecisionScoreMet())
{
if (ExecutableName != null) // only lnk program will need this one
- matchResult = StringMatcher.FuzzySearch(query, ExecutableName);
-
- if (!matchResult.IsSearchPrecisionScoreMet())
+ {
+ candidates.Add(ExecutableName);
+ }
+ if (useLocalizedName)
+ {
+ candidates.Add(Name);
+ }
+ matchResult = Match(query, candidates);
+ if (matchResult == null)
+ {
return null;
-
- matchResult.MatchData = new List();
+ }
+ else
+ {
+ // Nothing to highlight in title in this case
+ matchResult.MatchData.Clear();
+ }
}
string subtitle = string.Empty;
From c5c6ae7b68dd0eaef0f8959c951947b735327db0 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 21:18:20 +0800
Subject: [PATCH 023/118] Fix exception message argument
---
Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index d0070f83374..b0e34b2a50d 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -277,7 +277,7 @@ private static IEnumerable CurrentUserPackages()
}
catch (Exception e)
{
- ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{id}", "An unexpected error occured and "
+ ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{p.Id}", "An unexpected error occured and "
+ $"unable to verify if package is valid", e);
return false;
}
From 186f5f826e6a04896835ecfd202dd72dbd5aea20 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 21:24:50 +0800
Subject: [PATCH 024/118] Fix error message
---
Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index b0e34b2a50d..c05e36b8c93 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -277,7 +277,7 @@ private static IEnumerable CurrentUserPackages()
}
catch (Exception e)
{
- ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{p.Id}", "An unexpected error occured and "
+ ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{p.Id.FullName}", "An unexpected error occured and "
+ $"unable to verify if package is valid", e);
return false;
}
From 4dbfe2d6a0b3577d1483f51c896986b63c080bf0 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 21:25:12 +0800
Subject: [PATCH 025/118] Rename variables for readability
---
.../Programs/UWP.cs | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index c05e36b8c93..4c4a505f18e 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -249,24 +249,24 @@ public static bool SupportUWP()
private static IEnumerable CurrentUserPackages()
{
- var u = WindowsIdentity.GetCurrent().User;
+ var user = WindowsIdentity.GetCurrent().User;
- if (u != null)
+ if (user != null)
{
- var id = u.Value;
- PackageManager m;
+ var userId = user.Value;
+ PackageManager packageManager;
try
{
- m = new PackageManager();
+ packageManager = new PackageManager();
}
catch
{
// Bug from https://github.com/microsoft/CsWinRT, using Microsoft.Windows.SDK.NET.Ref 10.0.19041.0.
// Only happens on the first time, so a try catch can fix it.
- m = new PackageManager();
+ packageManager = new PackageManager();
}
- var ps = m.FindPackagesForUser(id);
- ps = ps.Where(p =>
+ var packages = packageManager.FindPackagesForUser(userId);
+ packages = packages.Where(p =>
{
try
{
@@ -282,7 +282,7 @@ private static IEnumerable CurrentUserPackages()
return false;
}
});
- return ps;
+ return packages;
}
else
{
From ff4290c1925b478e135421ecf3d8e2e02e3bbb41 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 21:34:49 +0800
Subject: [PATCH 026/118] fix typo
---
Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index 4c4a505f18e..00e7927ec36 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -277,7 +277,7 @@ private static IEnumerable CurrentUserPackages()
}
catch (Exception e)
{
- ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{p.Id.FullName}", "An unexpected error occured and "
+ ProgramLogger.LogException("UWP", "CurrentUserPackages", $"{p.Id.FullName}", "An unexpected error occurred and "
+ $"unable to verify if package is valid", e);
return false;
}
From c1215973762ab274805b37bb3fc1770f2c74d327 Mon Sep 17 00:00:00 2001
From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sat, 31 Dec 2022 23:37:40 +0800
Subject: [PATCH 027/118] Fix sarif (#1752)
* Fix SARIF
* only check changed files
* mask http/https
* add newline at eof
* Add dicts
* fix http regex
* fix http regex
---
.github/actions/spelling/patterns.txt | 4 ++++
.github/workflows/spelling.yml | 6 ++++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
index 73095a63829..9db69597e65 100644
--- a/.github/actions/spelling/patterns.txt
+++ b/.github/actions/spelling/patterns.txt
@@ -108,3 +108,7 @@
# Localization keys
#x:Key="[^"]+"
#{DynamicResource [^"]+}
+
+#http/https
+(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
+
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
index 125eee53a8b..7a7a48bcdd5 100644
--- a/.github/workflows/spelling.yml
+++ b/.github/workflows/spelling.yml
@@ -82,10 +82,10 @@ jobs:
post_comment: 0
use_magic_file: 1
experimental_apply_changes_via_bot: 1
- use_sarif: true # to show in pr page
+ use_sarif: 0 # to show in pr page
extra_dictionary_limit: 10
check_commit_messages: commits title description
- only_check_changed_files: false
+ only_check_changed_files: 1
check_extra_dictionaries: ''
quit_without_error: true
extra_dictionaries:
@@ -96,6 +96,8 @@ jobs:
cspell:csharp/csharp.txt
cspell:dotnet/dotnet.txt
cspell:python/src/python/python-lib.txt
+ cspell:aws/aws.txt
+ cspell:companies/src/companies.txt
warnings:
binary-file,deprecated-feature,large-file,limited-references,noisy-file,non-alpha-in-dictionary,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,unrecognized-spelling,no-newline-at-eof
From 35529a038641c4ea857156367c8416cc428a46e4 Mon Sep 17 00:00:00 2001
From: Hongtao Zhang
Date: Sat, 31 Dec 2022 10:43:07 -0500
Subject: [PATCH 028/118] fix some spelling
---
.github/actions/spelling/expect.txt | 20 +++++++++++++++++++
.github/actions/spelling/patterns.txt | 4 ++++
.../Languages/en.xaml | 2 +-
.../ProgramSuffixes.xaml | 2 +-
.../Programs/UWP.cs | 20 +++++++++----------
.../Programs/Win32.cs | 8 ++++----
Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 20 +++++++++----------
Plugins/Flow.Launcher.Plugin.Sys/Main.cs | 4 ++--
.../Languages/en.xaml | 2 +-
Plugins/Flow.Launcher.Plugin.Url/Main.cs | 2 +-
.../SearchSourceSetting.xaml.cs | 6 +++---
.../Helper/ResultHelper.cs | 8 ++++----
12 files changed, 61 insertions(+), 37 deletions(-)
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index ddb4695174f..7481cfff82b 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -35,3 +35,23 @@ mscorlib
pythonw
dotnet
winget
+jjw24
+wolframalpha
+gmail
+duckduckgo
+facebook
+findicon
+baidu
+pls
+websearch
+qianlifeng
+userdata
+srchadmin
+EWX
+dlgtext
+CMD
+appref-ms
+appref
+TSource
+runas
+dpi
\ No newline at end of file
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
index 73095a63829..0c1ac44cfbe 100644
--- a/.github/actions/spelling/patterns.txt
+++ b/.github/actions/spelling/patterns.txt
@@ -108,3 +108,7 @@
# Localization keys
#x:Key="[^"]+"
#{DynamicResource [^"]+}
+
+
+# html tag
+<\w+[^>]*>
\ No newline at end of file
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
index a7b8bcb9cc2..39807db2c47 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/en.xaml
@@ -55,7 +55,7 @@
File suffixes can't be empty
Protocols can't be empty
- File Suffixes
+ File Suffixes
URL Protocols
Steam Games
Epic Games
diff --git a/Plugins/Flow.Launcher.Plugin.Program/ProgramSuffixes.xaml b/Plugins/Flow.Launcher.Plugin.Program/ProgramSuffixes.xaml
index e4467a8b6a2..71bc12a8678 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/ProgramSuffixes.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/ProgramSuffixes.xaml
@@ -162,7 +162,7 @@
Margin="0,0,0,8"
FontSize="16"
FontWeight="SemiBold"
- Text="{DynamicResource flowlauncher_plugin_program_suffixes_excutable_types}" />
+ Text="{DynamicResource flowlauncher_plugin_program_suffixes_executable_types}" />
();
+ var apps = new List();
// WinRT
var appListEntries = package.GetAppListEntries();
foreach (var app in appListEntries)
@@ -46,7 +46,7 @@ public void InitAppsInPackage(Package package)
try
{
var tmp = new Application(app, this);
- applist.Add(tmp);
+ apps.Add(tmp);
}
catch (Exception e)
{
@@ -55,7 +55,7 @@ public void InitAppsInPackage(Package package)
+ $"{FullName} from location {Location}", e);
}
}
- Apps = applist.ToArray();
+ Apps = apps.ToArray();
try
{
@@ -392,14 +392,14 @@ public Result Result(string query, IPublicAPI api)
{
title = $"{Name}: {Description}";
var nameMatch = StringMatcher.FuzzySearch(query, Name);
- var desciptionMatch = StringMatcher.FuzzySearch(query, Description);
- if (desciptionMatch.Score > nameMatch.Score)
+ var descriptionMatch = StringMatcher.FuzzySearch(query, Description);
+ if (descriptionMatch.Score > nameMatch.Score)
{
- for (int i = 0; i < desciptionMatch.MatchData.Count; i++)
+ for (int i = 0; i < descriptionMatch.MatchData.Count; i++)
{
- desciptionMatch.MatchData[i] += Name.Length + 2; // 2 is ": "
+ descriptionMatch.MatchData[i] += Name.Length + 2; // 2 is ": "
}
- matchResult = desciptionMatch;
+ matchResult = descriptionMatch;
}
else matchResult = nameMatch;
}
@@ -658,8 +658,8 @@ string TryToFindLogo(string uri, string path, int px)
// var brush = new SolidColorBrush(color);
// var pen = new Pen(brush, 1);
// var backgroundArea = new Rect(0, 0, width, width);
- // var rectabgle = new RectangleGeometry(backgroundArea);
- // var rectDrawing = new GeometryDrawing(brush, pen, rectabgle);
+ // var rectangle = new RectangleGeometry(backgroundArea);
+ // var rectDrawing = new GeometryDrawing(brush, pen, rectangle);
// group.Children.Add(rectDrawing);
// var imageArea = new Rect(x, y, image.Width, image.Height);
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index f8c2206101e..91841827e17 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -30,7 +30,7 @@ public class Win32 : IProgram, IEquatable
///
public string FullPath { get; set; }
///
- /// Path of the excutable for .lnk, or the URL for .url. Arguments are included if any.
+ /// Path of the executable for .lnk, or the URL for .url. Arguments are included if any.
///
public string LnkResolvedPath { get; set; }
///
@@ -495,12 +495,12 @@ private static IEnumerable GetPathFromRegistry(RegistryKey root)
.Distinct();
}
- private static string GetProgramPathFromRegistrySubKeys(RegistryKey root, string subkey)
+ private static string GetProgramPathFromRegistrySubKeys(RegistryKey root, string subKey)
{
var path = string.Empty;
try
{
- using (var key = root.OpenSubKey(subkey))
+ using (var key = root.OpenSubKey(subKey))
{
if (key == null)
return string.Empty;
@@ -577,7 +577,7 @@ public static IEnumerable DistinctBy(IEnumerable source, Func
private static IEnumerable ProgramsHasher(IEnumerable programs)
{
- // TODO: Unable to distinguish multiple lnks to the same excutable but with different params
+ // TODO: Unable to distinguish multiple lnks to the same executable but with different params
return programs.GroupBy(p => p.ExecutablePath.ToLowerInvariant())
.AsParallel()
.SelectMany(g =>
diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
index 7ce597b9629..f64f5d37675 100644
--- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs
@@ -33,7 +33,7 @@ public List Query(Query query)
string cmd = query.Search;
if (string.IsNullOrEmpty(cmd))
{
- return ResultsFromlHistory();
+ return ResultsFromHistory();
}
else
{
@@ -55,8 +55,8 @@ public List Query(Query query)
else if (Directory.Exists(Path.GetDirectoryName(excmd) ?? string.Empty))
{
basedir = Path.GetDirectoryName(excmd);
- var dirn = Path.GetDirectoryName(cmd);
- dir = (dirn.EndsWith("/") || dirn.EndsWith(@"\")) ? dirn : cmd.Substring(0, dirn.Length + 1);
+ var dirName = Path.GetDirectoryName(cmd);
+ dir = (dirName.EndsWith("/") || dirName.EndsWith(@"\")) ? dirName : cmd.Substring(0, dirName.Length + 1);
}
if (basedir != null)
@@ -158,7 +158,7 @@ private Result GetCurrentCmd(string cmd)
return result;
}
- private List ResultsFromlHistory()
+ private List ResultsFromHistory()
{
IEnumerable history = _settings.CommandHistory.OrderByDescending(o => o.Value)
.Select(m => new Result
@@ -204,7 +204,7 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin
info.Arguments = $"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command}";
//// Use info.Arguments instead of info.ArgumentList to enable users better control over the arguments they are writing.
- //// Previous code using ArgumentList, commands needed to be seperated correctly:
+ //// Previous code using ArgumentList, commands needed to be separated correctly:
//// Incorrect:
// info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
// info.ArgumentList.Add(command); //<== info.ArgumentList.Add("mkdir \"c:\\test new\"");
@@ -377,9 +377,9 @@ public string GetTranslatedPluginDescription()
public List LoadContextMenus(Result selectedResult)
{
- var resultlist = new List
+ var results = new List
{
- new Result
+ new()
{
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"),
AsyncAction = async c =>
@@ -390,7 +390,7 @@ public List LoadContextMenus(Result selectedResult)
IcoPath = "Images/user.png",
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe7ee")
},
- new Result
+ new()
{
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_administrator"),
Action = c =>
@@ -401,7 +401,7 @@ public List LoadContextMenus(Result selectedResult)
IcoPath = "Images/admin.png",
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\xe7ef")
},
- new Result
+ new()
{
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_copy"),
Action = c =>
@@ -414,7 +414,7 @@ public List LoadContextMenus(Result selectedResult)
}
};
- return resultlist;
+ return results;
}
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
index 9e4a4ed1cde..43f293f74ce 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs
@@ -95,11 +95,11 @@ private List Commands()
IcoPath = "Images\\shutdown.png",
Action = c =>
{
- var reuslt = MessageBox.Show(
+ var result = MessageBox.Show(
context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_shutdown_computer"),
context.API.GetTranslation("flowlauncher_plugin_sys_shutdown_computer"),
MessageBoxButton.YesNo, MessageBoxImage.Warning);
- if (reuslt == MessageBoxResult.Yes)
+ if (result == MessageBoxResult.Yes)
{
Process.Start("shutdown", "/s /t 0");
}
diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml
index eff1ac26354..461ccd1970b 100644
--- a/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/en.xaml
@@ -7,7 +7,7 @@
New Tab
Open url:{0}
- Can't open url:{0}
+ Can't open url:{0}
URL
Open the typed URL from Flow Launcher
diff --git a/Plugins/Flow.Launcher.Plugin.Url/Main.cs b/Plugins/Flow.Launcher.Plugin.Url/Main.cs
index c507f0b1ce5..4831bac1d16 100644
--- a/Plugins/Flow.Launcher.Plugin.Url/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Url/Main.cs
@@ -74,7 +74,7 @@ public List Query(Query query)
}
catch(Exception)
{
- context.API.ShowMsg(string.Format(context.API.GetTranslation("flowlauncher_plugin_url_canot_open_url"), raw));
+ context.API.ShowMsg(string.Format(context.API.GetTranslation("flowlauncher_plugin_url_cannot_open_url"), raw));
return false;
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs
index c19396da0dc..60863ee8281 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs
@@ -21,16 +21,16 @@ public SearchSourceSettingWindow(IList sources, PluginInitContext
{
_oldSearchSource = old;
_viewModel = new SearchSourceViewModel {SearchSource = old.DeepCopy()};
- Initilize(sources, context, Action.Edit);
+ Initialize(sources, context, Action.Edit);
}
public SearchSourceSettingWindow(IList sources, PluginInitContext context)
{
_viewModel = new SearchSourceViewModel {SearchSource = new SearchSource()};
- Initilize(sources, context, Action.Add);
+ Initialize(sources, context, Action.Add);
}
- private async void Initilize(IList sources, PluginInitContext context, Action action)
+ private async void Initialize(IList sources, PluginInitContext context, Action action)
{
InitializeComponent();
DataContext = _viewModel;
diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs
index 38d06b2cb34..0bfb00b3499 100644
--- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs
+++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Helper/ResultHelper.cs
@@ -18,7 +18,7 @@ internal static class ResultHelper
public static void Init(IPublicAPI api) => _api = api;
- private static List GetDefaultReuslts(in IEnumerable list,
+ private static List GetDefaultResults(in IEnumerable list,
string windowsSettingIconPath,
string controlPanelIconPath)
{
@@ -45,7 +45,7 @@ internal static List GetResultList(
{
if (string.IsNullOrWhiteSpace(query.Search))
{
- return GetDefaultReuslts(list, windowsSettingIconPath, controlPanelIconPath);
+ return GetDefaultResults(list, windowsSettingIconPath, controlPanelIconPath);
}
var resultList = new List();
@@ -110,7 +110,7 @@ internal static List GetResultList(
return resultList;
}
- private const int TaskLinkScorePanelty = 50;
+ private const int TaskLinkScorePenalty = 50;
private static Result NewSettingResult(int score, string type, string windowsSettingIconPath, string controlPanelIconPath, WindowsSetting entry) => new()
{
@@ -120,7 +120,7 @@ internal static List GetResultList(
SubTitle = GetSubtitle(entry.Area, type),
Title = entry.Name,
ContextData = entry,
- Score = score - (type == "TaskLink" ? TaskLinkScorePanelty : 0),
+ Score = score - (type == "TaskLink" ? TaskLinkScorePenalty : 0),
};
private static string GetSubtitle(string section, string entryType)
From 8cc6fcfef0a5c318340e6f7596ed58e6496ff70c Mon Sep 17 00:00:00 2001
From: Kevin Zhang <45326534+taooceros@users.noreply.github.com>
Date: Sat, 31 Dec 2022 10:46:01 -0500
Subject: [PATCH 029/118] Update patterns.txt
---
.github/actions/spelling/patterns.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
index 142cd475a4d..c0a00815304 100644
--- a/.github/actions/spelling/patterns.txt
+++ b/.github/actions/spelling/patterns.txt
@@ -113,4 +113,4 @@
<\w+[^>]*>
#http/https
-(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
\ No newline at end of file
+(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
From 3992990ccb3cd26c00ee29e158eb4c0ba7c06a91 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sun, 1 Jan 2023 00:24:36 +0800
Subject: [PATCH 030/118] Remove redundant extension check
---
.../Programs/Win32.cs | 31 +++++++++----------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index fafe7d5bfff..e9aeb03a8fc 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -333,26 +333,23 @@ private static Win32 LnkProgram(string path)
program.LnkResolvedPath = Path.GetFullPath(target);
program.ExecutableName = Path.GetFileName(target);
- if (Extension(target) == ExeExtension)
+ var args = _helper.arguments;
+ if(!string.IsNullOrEmpty(args))
{
- var args = _helper.arguments;
- if(!string.IsNullOrEmpty(args))
- {
- program.LnkResolvedPath += " " + args;
- }
+ program.LnkResolvedPath += " " + args;
+ }
- var description = _helper.description;
- if (!string.IsNullOrEmpty(description))
- {
- program.Description = description;
- }
- else
+ var description = _helper.description;
+ if (!string.IsNullOrEmpty(description))
+ {
+ program.Description = description;
+ }
+ else
+ {
+ var info = FileVersionInfo.GetVersionInfo(target);
+ if (!string.IsNullOrEmpty(info.FileDescription))
{
- var info = FileVersionInfo.GetVersionInfo(target);
- if (!string.IsNullOrEmpty(info.FileDescription))
- {
- program.Description = info.FileDescription;
- }
+ program.Description = info.FileDescription;
}
}
}
From f7f82a746ee67efca57a79dedef25898623f30d5 Mon Sep 17 00:00:00 2001
From: Hongtao Zhang
Date: Sat, 31 Dec 2022 17:12:43 -0500
Subject: [PATCH 031/118] fix more spelling
---
.github/actions/spelling/expect.txt | 4 +++-
Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs | 4 ++--
Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs | 10 +++++-----
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index 7481cfff82b..c969a00f8b3 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -54,4 +54,6 @@ appref-ms
appref
TSource
runas
-dpi
\ No newline at end of file
+dpi
+popup
+ptr
\ No newline at end of file
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
index 2149805f17b..b1ec7006878 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWP.cs
@@ -147,7 +147,7 @@ private PackageVersion GetPackageVersionFromManifest(XmlNode xmlRoot)
}
ProgramLogger.LogException($"|UWP|GetPackageVersionFromManifest|{Location}" +
- "|Trying to get the package version of the UWP program, but an unknown UWP appmanifest version in package "
+ "|Trying to get the package version of the UWP program, but an unknown UWP app-manifest version in package "
+ $"{FullName} from location {Location}", new FormatException());
return PackageVersion.Unknown;
}
@@ -633,7 +633,7 @@ string TryToFindLogo(string uri, string path, int px)
// }
// else
// {
- // ProgramLogger.LogException($"|UWP|ImageFromPath|{(string.IsNullOrEmpty(path) ? "Not Avaliable" : path)}" +
+ // ProgramLogger.LogException($"|UWP|ImageFromPath|{(string.IsNullOrEmpty(path) ? "Not Available" : path)}" +
// $"|Unable to get logo for {UserModelId} from {path} and" +
// $" located in {Location}", new FileNotFoundException());
// return new BitmapImage(new Uri(Constant.MissingImgIcon));
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 91841827e17..3373948a38a 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -84,14 +84,14 @@ public Result Result(string query, IPublicAPI api)
{
title = $"{Name}: {Description}";
var nameMatch = StringMatcher.FuzzySearch(query, Name);
- var desciptionMatch = StringMatcher.FuzzySearch(query, Description);
- if (desciptionMatch.Score > nameMatch.Score)
+ var descriptionMatch = StringMatcher.FuzzySearch(query, Description);
+ if (descriptionMatch.Score > nameMatch.Score)
{
- for (int i = 0; i < desciptionMatch.MatchData.Count; i++)
+ for (int i = 0; i < descriptionMatch.MatchData.Count; i++)
{
- desciptionMatch.MatchData[i] += Name.Length + 2; // 2 is ": "
+ descriptionMatch.MatchData[i] += Name.Length + 2; // 2 is ": "
}
- matchResult = desciptionMatch;
+ matchResult = descriptionMatch;
}
else matchResult = nameMatch;
}
From 1d02f231a6e006d0cf271a997ff3a57af1692a16 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Sun, 1 Jan 2023 12:27:27 +0930
Subject: [PATCH 032/118] update to use score from fuzzy search
---
.../Flow.Launcher.Plugin.PluginIndicator/Main.cs | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
index b0918d8c736..aea0d77a1f6 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Main.cs
@@ -12,17 +12,19 @@ public List Query(Query query)
{
var results =
from keyword in PluginManager.NonGlobalPlugins.Keys
- let metadata = PluginManager.NonGlobalPlugins[keyword].Metadata
- where (context.API.FuzzySearch(query.Search, keyword).IsSearchPrecisionScoreMet()
- || context.API.FuzzySearch(query.Search, metadata.Name).IsSearchPrecisionScoreMet()
+ let plugin = PluginManager.NonGlobalPlugins[keyword].Metadata
+ let keywordSearchResult = context.API.FuzzySearch(query.Search, keyword)
+ let searchResult = keywordSearchResult.IsSearchPrecisionScoreMet() ? keywordSearchResult : context.API.FuzzySearch(query.Search, plugin.Name)
+ let score = searchResult.Score
+ where (searchResult.IsSearchPrecisionScoreMet()
|| string.IsNullOrEmpty(query.Search)) // To list all available action keywords
- && !metadata.Disabled
+ && !plugin.Disabled
select new Result
{
Title = keyword,
- SubTitle = string.Format(context.API.GetTranslation("flowlauncher_plugin_pluginindicator_result_subtitle"), metadata.Name),
- Score = 100,
- IcoPath = metadata.IcoPath,
+ SubTitle = string.Format(context.API.GetTranslation("flowlauncher_plugin_pluginindicator_result_subtitle"), plugin.Name),
+ Score = score,
+ IcoPath = plugin.IcoPath,
AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}",
Action = c =>
{
From 1d1af7263a49c2377ce307f117354940aa549793 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Sun, 1 Jan 2023 12:36:03 +0930
Subject: [PATCH 033/118] fix typos
---
Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
index 68bf66085ab..084779ef9d7 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json
@@ -2,7 +2,7 @@
"ID": "6A122269676E40EB86EB543B945932B9",
"ActionKeyword": "*",
"Name": "Plugin Indicator",
- "Description": "Provide plugin actionword suggestion",
+ "Description": "Provides plugin action keyword suggestions",
"Author": "qianlifeng",
"Version": "2.0.1",
"Language": "csharp",
From ff00c676c9bbb646957c6ddac69cabad42d108dc Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sun, 1 Jan 2023 13:36:10 +0800
Subject: [PATCH 034/118] Update expect.txt
---
.github/actions/spelling/expect.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index c969a00f8b3..51bcf83f5d4 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -56,4 +56,5 @@ TSource
runas
dpi
popup
-ptr
\ No newline at end of file
+ptr
+pluginindicator
\ No newline at end of file
From c53fdc1ed630f97034d65b8044e98384ef25bae5 Mon Sep 17 00:00:00 2001
From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Mon, 2 Jan 2023 17:05:37 +0800
Subject: [PATCH 035/118] Fix crowdin spell check action (#1756)
* Tweak file exclusion rule
* Exclude l10n_dev branch
* Disable cancel in progress
* Temporarily check all for test
* Fix checking head ref
* Stop checking Resources.resx
* Update texts
* Update regex
* update exclude list
* Test l10n_dev
* ignore resx
* update
* fix branch head
* update newline
* update regex
* test
* remove test code
* Exclude l10n_dev branch
---
.github/actions/spelling/excludes.txt | 10 +++++-----
.github/actions/spelling/expect.txt | 6 +++++-
.github/actions/spelling/patterns.txt | 1 +
.github/workflows/spelling.yml | 4 ++--
4 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
index e1d95e7738d..224014ebac5 100644
--- a/.github/actions/spelling/excludes.txt
+++ b/.github/actions/spelling/excludes.txt
@@ -57,12 +57,12 @@
^\.github/actions/spelling/
^\Q.github/workflows/spelling.yml\E$
# Custom
-(?:^|/)Languages/(?!en.xaml)
+(?:^|/)Languages/(?!en\.xaml)
Scripts/
-Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/
-Plugins/Flow.Launcher.Plugin.WindowsSettings/WindowsSettings.json
-Plugins/Flow.Launcher.Plugin.WebSearch/setting.json
-(?:^|/)FodyWeavers.xml
+\.resx$
+^\QPlugins/Flow.Launcher.Plugin.WindowsSettings/WindowsSettings.json\E$
+^\QPlugins/Flow.Launcher.Plugin.WebSearch/setting.json\E$
+(?:^|/)FodyWeavers\.xml
.editorconfig
ignore$
\.ps1$
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index 51bcf83f5d4..a91287cc034 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -57,4 +57,8 @@ runas
dpi
popup
ptr
-pluginindicator
\ No newline at end of file
+pluginindicator
+TobiasSekan
+Img
+img
+resx
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
index c0a00815304..2f4ff418da0 100644
--- a/.github/actions/spelling/patterns.txt
+++ b/.github/actions/spelling/patterns.txt
@@ -111,6 +111,7 @@
# html tag
<\w+[^>]*>
+\w+[^>]*>
#http/https
(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
index 7a7a48bcdd5..6037c100e1a 100644
--- a/.github/workflows/spelling.yml
+++ b/.github/workflows/spelling.yml
@@ -65,11 +65,11 @@ jobs:
outputs:
followup: ${{ steps.spelling.outputs.followup }}
runs-on: ubuntu-latest
- if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
+ if: (contains(github.event_name, 'pull_request') && github.head_ref != 'l10n_dev') || github.event_name == 'push'
concurrency:
group: spelling-${{ github.event.pull_request.number || github.ref }}
# note: If you use only_check_changed_files, you do not want cancel-in-progress
- cancel-in-progress: true
+ cancel-in-progress: false
steps:
- name: check-spelling
id: spelling
From 4d10089e3fb2284a3756c49292605d165f3e0691 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sun, 1 Jan 2023 23:22:16 +0800
Subject: [PATCH 036/118] Refactor clear log folder logic
Clear logs of all versions
Use binding for button text
Move open log dir to vm
---
Flow.Launcher/SettingWindow.xaml | 2 +-
Flow.Launcher/SettingWindow.xaml.cs | 4 +-
.../ViewModel/SettingWindowViewModel.cs | 45 +++++++++++++------
3 files changed, 33 insertions(+), 18 deletions(-)
diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml
index 320b6d9a3e8..81ced68a829 100644
--- a/Flow.Launcher/SettingWindow.xaml
+++ b/Flow.Launcher/SettingWindow.xaml
@@ -3041,7 +3041,7 @@
Name="ClearLogFolderBtn"
Margin="0,0,12,0"
Click="ClearLogFolder"
- Content="{Binding CheckLogFolder, UpdateSourceTrigger=PropertyChanged}" />
+ Content="{Binding CheckLogFolder, Mode=OneWay}" />
### Mentions
From 2e4127c63b0de314f155c19e154a30c6c1294cba Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 00:37:05 +0800
Subject: [PATCH 089/118] Catch specifc exception
---
.../Search/SearchManager.cs | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 93a81f9470c..b3c118fcabe 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -105,14 +105,16 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
await foreach (var search in searchResults.WithCancellation(token).ConfigureAwait(false))
results.Add(ResultManager.CreateResult(query, search));
}
+ catch (OperationCanceledException)
+ {
+ return results.ToList();
+ }
+ catch (EngineNotAvailableException)
+ {
+ throw;
+ }
catch (Exception e)
{
- if (e is OperationCanceledException)
- return results.ToList();
-
- if (e is EngineNotAvailableException)
- throw;
-
throw new SearchException(engineName, e.Message, e);
}
From 6efa9d1731fee3de894566eb558c0f92111cdaeb Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 00:40:54 +0800
Subject: [PATCH 090/118] Only expand environment var when path starts with %
---
Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index b3c118fcabe..45ba690d380 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -175,7 +175,7 @@ private async Task> PathSearchAsync(Query query, CancellationToken
return EnvironmentVariables.GetEnvironmentStringPathSuggestions(querySearch, query, Context);
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
- var isEnvironmentVariablePath = querySearch[1..].Contains("%\\");
+ var isEnvironmentVariablePath = querySearch[0] == '%' && querySearch[1..].Contains("%\\");
var locationPath = querySearch;
From 983f0aafc4267fa64b9469d72710532aa9b027fd Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 00:49:24 +0800
Subject: [PATCH 091/118] Use a static dictionary for environment vars
---
.../Search/EnvironmentVariables.cs | 31 +++++++++++++------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index 595ac36109c..fae5f59cd5a 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
@@ -8,12 +8,25 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{
public static class EnvironmentVariables
{
+ private static Dictionary _envStringPaths = null;
+ private static Dictionary EnvStringPaths
+ {
+ get
+ {
+ if (_envStringPaths == null)
+ {
+ _envStringPaths = LoadEnvironmentStringPaths();
+ }
+ return _envStringPaths;
+ }
+ }
+
internal static bool IsEnvironmentVariableSearch(string search)
{
return search.StartsWith("%")
&& search != "%%"
- && !search.Contains("\\") &&
- LoadEnvironmentStringPaths().Count > 0;
+ && !search.Contains("\\")
+ && EnvStringPaths.Count > 0;
}
internal static Dictionary LoadEnvironmentStringPaths()
@@ -44,15 +57,14 @@ internal static Dictionary LoadEnvironmentStringPaths()
internal static string TranslateEnvironmentVariablePath(string environmentVariablePath)
{
- var envStringPaths = LoadEnvironmentStringPaths();
var splitSearch = environmentVariablePath.Substring(1).Split("%");
var exactEnvStringPath = splitSearch[0];
// if there are more than 2 % characters in the query, don't bother
- if (splitSearch.Length == 2 && envStringPaths.ContainsKey(exactEnvStringPath))
+ if (splitSearch.Length == 2 && EnvStringPaths.ContainsKey(exactEnvStringPath))
{
var queryPartToReplace = $"%{exactEnvStringPath}%";
- var expandedPath = envStringPaths[exactEnvStringPath];
+ var expandedPath = EnvStringPaths[exactEnvStringPath];
// replace the %envstring% part of the query with its expanded equivalent
return environmentVariablePath.Replace(queryPartToReplace, expandedPath);
}
@@ -64,7 +76,6 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea
{
var results = new List();
- var environmentVariables = LoadEnvironmentStringPaths();
var search = querySearch;
if (querySearch.EndsWith("%") && search.Length > 1)
@@ -72,9 +83,9 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea
// query starts and ends with a %, find an exact match from env-string paths
search = querySearch.Substring(1, search.Length - 2);
- if (environmentVariables.ContainsKey(search))
+ if (EnvStringPaths.ContainsKey(search))
{
- var expandedPath = environmentVariables[search];
+ var expandedPath = EnvStringPaths[search];
results.Add(ResultManager.CreateFolderResult($"%{search}%", expandedPath, expandedPath, query));
@@ -91,7 +102,7 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea
search = search.Substring(1);
}
- foreach (var p in environmentVariables)
+ foreach (var p in EnvStringPaths)
{
if (p.Key.StartsWith(search, StringComparison.InvariantCultureIgnoreCase))
{
From 009ee3dc5c7a35daa36872f77a2f999cb8001815 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 12:34:36 +0800
Subject: [PATCH 092/118] Simplify environment variable detection
---
.../Search/EnvironmentVariables.cs | 29 +++++++------------
.../Search/SearchManager.cs | 2 +-
2 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index fae5f59cd5a..3d6a1ad8a21 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -23,12 +23,17 @@ private static Dictionary EnvStringPaths
internal static bool IsEnvironmentVariableSearch(string search)
{
- return search.StartsWith("%")
+ return search.StartsWith("%")
&& search != "%%"
- && !search.Contains("\\")
+ && !search.Contains('\\')
&& EnvStringPaths.Count > 0;
}
+ internal static bool BeginsWithEnvironmentVar(string search)
+ {
+ return search[0] == '%' && search[1..].Contains("%\\");
+ }
+
internal static Dictionary LoadEnvironmentStringPaths()
{
var envStringPaths = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
@@ -57,19 +62,7 @@ internal static Dictionary LoadEnvironmentStringPaths()
internal static string TranslateEnvironmentVariablePath(string environmentVariablePath)
{
- var splitSearch = environmentVariablePath.Substring(1).Split("%");
- var exactEnvStringPath = splitSearch[0];
-
- // if there are more than 2 % characters in the query, don't bother
- if (splitSearch.Length == 2 && EnvStringPaths.ContainsKey(exactEnvStringPath))
- {
- var queryPartToReplace = $"%{exactEnvStringPath}%";
- var expandedPath = EnvStringPaths[exactEnvStringPath];
- // replace the %envstring% part of the query with its expanded equivalent
- return environmentVariablePath.Replace(queryPartToReplace, expandedPath);
- }
-
- return environmentVariablePath;
+ return Environment.ExpandEnvironmentVariables(environmentVariablePath);
}
internal static List GetEnvironmentStringPathSuggestions(string querySearch, Query query, PluginInitContext context)
@@ -86,9 +79,9 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea
if (EnvStringPaths.ContainsKey(search))
{
var expandedPath = EnvStringPaths[search];
-
+
results.Add(ResultManager.CreateFolderResult($"%{search}%", expandedPath, expandedPath, query));
-
+
return results;
}
}
@@ -101,7 +94,7 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea
{
search = search.Substring(1);
}
-
+
foreach (var p in EnvStringPaths)
{
if (p.Key.StartsWith(search, StringComparison.InvariantCultureIgnoreCase))
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 45ba690d380..677b7f03860 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -175,7 +175,7 @@ private async Task> PathSearchAsync(Query query, CancellationToken
return EnvironmentVariables.GetEnvironmentStringPathSuggestions(querySearch, query, Context);
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
- var isEnvironmentVariablePath = querySearch[0] == '%' && querySearch[1..].Contains("%\\");
+ var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
var locationPath = querySearch;
From 52e72992c2d417e2fd5b3e149a568aa0fef6aabe Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 14:47:42 +0800
Subject: [PATCH 093/118] Change context and settings to non static
---
Flow.Launcher.Test/Plugins/ExplorerTest.cs | 3 ++-
.../Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 8 ++++----
.../Search/WindowsIndex/WindowsIndexSearchManager.cs | 6 +++---
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
index 36f0294a93e..4075947ffb3 100644
--- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs
+++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
@@ -176,7 +176,7 @@ public void GivenQuery_WhenActionKeywordForFileContentSearchExists_ThenFileConte
var searchManager = new SearchManager(new Settings(), new PluginInitContext());
// When
- var result = SearchManager.IsFileContentSearch(query.ActionKeyword);
+ var result = searchManager.IsFileContentSearch(query.ActionKeyword);
// Then
Assert.IsTrue(result,
@@ -193,6 +193,7 @@ public void GivenQuery_WhenActionKeywordForFileContentSearchExists_ThenFileConte
[TestCase(@"c:\>*", true)]
[TestCase(@"c:\>", true)]
[TestCase(@"c:\SomeLocation\SomeOtherLocation\>", true)]
+ [TestCase(@"c:\SomeLocation\SomeOtherLocation", true)]
public void WhenGivenQuerySearchString_ThenShouldIndicateIfIsLocationPathString(string querySearchString, bool expectedResult)
{
// When, Given
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 677b7f03860..ce1283e0610 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -13,9 +13,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{
public class SearchManager
{
- internal static PluginInitContext Context;
+ internal PluginInitContext Context;
- internal static Settings Settings;
+ internal Settings Settings;
public SearchManager(Settings settings, PluginInitContext context)
{
@@ -144,7 +144,7 @@ private bool ActionKeywordMatch(Query query, Settings.ActionKeyword allowedActio
};
}
- private static List EverythingContentSearchResult(Query query)
+ private List EverythingContentSearchResult(Query query)
{
return new List()
{
@@ -236,7 +236,7 @@ private async Task> PathSearchAsync(Query query, CancellationToken
return results.ToList();
}
- public static bool IsFileContentSearch(string actionKeyword) => actionKeyword == Settings.FileContentSearchActionKeyword;
+ public bool IsFileContentSearch(string actionKeyword) => actionKeyword == Settings.FileContentSearchActionKeyword;
private bool UseWindowsIndexForDirectorySearch(string locationPath)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
index abb50849d16..f1060a4ac91 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
@@ -97,10 +97,10 @@ public IAsyncEnumerable EnumerateAsync(string path, string search,
private IAsyncEnumerable HandledEngineNotAvailableExceptionAsync()
{
- if (!SearchManager.Settings.WarnWindowsSearchServiceOff)
+ if (!Settings.WarnWindowsSearchServiceOff)
return AsyncEnumerable.Empty();
- var api = SearchManager.Context.API;
+ var api = Main.Context.API;
throw new EngineNotAvailableException(
"Windows Index",
@@ -108,7 +108,7 @@ private IAsyncEnumerable HandledEngineNotAvailableExceptionAsync()
api.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"),
c =>
{
- SearchManager.Settings.WarnWindowsSearchServiceOff = false;
+ Settings.WarnWindowsSearchServiceOff = false;
// Clears the warning message so user is not mistaken that it has not worked
api.ChangeQuery(string.Empty);
From 51f5d8a410e1708280e1c7e48c23951b4c8db37d Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 14:48:35 +0800
Subject: [PATCH 094/118] Add new constructor for EngineNotAvailableException
---
.../Exceptions/EngineNotAvailableException.cs | 21 +++++++++++++++---
.../Everything/EverythingSearchManager.cs | 22 +++++++------------
.../WindowsIndex/WindowsIndexSearchManager.cs | 6 ++---
3 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/EngineNotAvailableException.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/EngineNotAvailableException.cs
index 1a48892f597..a6315fb4b7f 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/EngineNotAvailableException.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Exceptions/EngineNotAvailableException.cs
@@ -3,8 +3,6 @@
using System;
using System.Threading.Tasks;
using System.Windows;
-using Flow.Launcher.Plugin.Explorer.Search.IProvider;
-using JetBrains.Annotations;
namespace Flow.Launcher.Plugin.Explorer.Exceptions;
@@ -20,7 +18,7 @@ public EngineNotAvailableException(
string engineName,
string resolution,
string message,
- Func> action = null) : base(message)
+ Func>? action = null) : base(message)
{
EngineName = engineName;
Resolution = resolution;
@@ -40,6 +38,23 @@ public EngineNotAvailableException(
EngineName = engineName;
Resolution = resolution;
}
+
+ public EngineNotAvailableException(
+ string engineName,
+ string resolution,
+ string message,
+ string errorIconPath,
+ Func>? action = null) : base(message)
+ {
+ EngineName = engineName;
+ Resolution = resolution;
+ ErrorIcon = errorIconPath;
+ Action = action ?? (_ =>
+ {
+ Clipboard.SetDataObject(this.ToString());
+ return ValueTask.FromResult(true);
+ });
+ }
public override string ToString()
{
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs
index ffd22d9f5eb..4bb8a0cddeb 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs
@@ -27,20 +27,16 @@ private async ValueTask ThrowIfEverythingNotAvailableAsync(CancellationToken tok
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_click_to_launch_or_install"),
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_is_not_running"),
- ClickToInstallEverythingAsync)
- {
- ErrorIcon = Constants.EverythingErrorImagePath
- };
+ Constants.EverythingErrorImagePath,
+ ClickToInstallEverythingAsync);
}
catch (DllNotFoundException)
{
throw new EngineNotAvailableException(
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
"Please check whether your system is x86 or x64",
- Main.Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue"))
- {
- ErrorIcon = Constants.GeneralSearchErrorImagePath
- };
+ Constants.GeneralSearchErrorImagePath,
+ Main.Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue"));
}
}
private async ValueTask ClickToInstallEverythingAsync(ActionContext _)
@@ -72,16 +68,14 @@ public async IAsyncEnumerable ContentSearchAsync(string plainSearc
if (!Settings.EnableEverythingContentSearch)
{
throw new EngineNotAvailableException(Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
- "Click to Enable Everything Content Search (only applicable to Everything 1.5+ with indexed content)",
- "Everything Content Search is not enabled.",
+ Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search"),
+ Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search_tips"),
+ Constants.EverythingErrorImagePath,
_ =>
{
Settings.EnableEverythingContentSearch = true;
return ValueTask.FromResult(true);
- })
- {
- ErrorIcon = Constants.EverythingErrorImagePath
- };
+ });
}
if (token.IsCancellationRequested)
yield break;
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
index f1060a4ac91..c3a7d9e9123 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndexSearchManager.cs
@@ -106,6 +106,7 @@ private IAsyncEnumerable HandledEngineNotAvailableExceptionAsync()
"Windows Index",
api.GetTranslation("plugin_explorer_windowsSearchServiceFix"),
api.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"),
+ Constants.WindowsIndexErrorImagePath,
c =>
{
Settings.WarnWindowsSearchServiceOff = false;
@@ -114,10 +115,7 @@ private IAsyncEnumerable HandledEngineNotAvailableExceptionAsync()
api.ChangeQuery(string.Empty);
return ValueTask.FromResult(false);
- })
- {
- ErrorIcon = Constants.WindowsIndexErrorImagePath
- };
+ });
}
}
}
From 383298a46bca314c26f1f6c1738c1935c35dcf19 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 16:04:41 +0800
Subject: [PATCH 095/118] Fix null subtitle when creating disk result
---
Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
index 62ad7160801..ed4f39735bd 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
@@ -71,7 +71,7 @@ internal static Result CreateFolderResult(string title, string subtitle, string
{
Title = title,
IcoPath = path,
- SubTitle = Path.GetDirectoryName(path),
+ SubTitle = subtitle,
AutoCompleteText = GetAutoCompleteText(title, query, path, ResultType.Folder),
TitleHighlightData = StringMatcher.FuzzySearch(query.Search, title).MatchData,
CopyText = path,
From a6b7c5898b1a472b3d377f40e2b089b8d5c472b1 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 16:05:39 +0800
Subject: [PATCH 096/118] Fix subpath check
---
.../Search/SearchManager.cs | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index ce1283e0610..4a25fe0ad81 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -8,6 +8,7 @@
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Plugin.Explorer.Exceptions;
+using System.IO;
namespace Flow.Launcher.Plugin.Explorer.Search
{
@@ -119,7 +120,7 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
}
results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any(
- excludedPath => r.SubTitle.StartsWith(excludedPath.Path, StringComparison.OrdinalIgnoreCase)));
+ excludedPath => IsSubPathOf(r.SubTitle, excludedPath.Path)));
return results.ToList();
}
@@ -254,5 +255,16 @@ internal static bool IsEnvironmentVariableSearch(string search)
&& search != "%%"
&& !search.Contains('\\');
}
+
+ // https://stackoverflow.com/a/66877016
+ internal static bool IsSubPathOf(string subPath, string basePath)
+ {
+ var rel = Path.GetRelativePath(basePath, subPath);
+ return rel != "."
+ && rel != ".."
+ && !rel.StartsWith("../")
+ && !rel.StartsWith(@"..\")
+ && !Path.IsPathRooted(rel);
+ }
}
}
From 2c36692052f1f43782ee6f7f3fdf8416b7f7f6c7 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 16:06:01 +0800
Subject: [PATCH 097/118] Use case-insensitve comparator for path
---
.../Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 4a25fe0ad81..da65091248c 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -31,12 +31,13 @@ private class PathEqualityComparator : IEqualityComparer
public bool Equals(Result x, Result y)
{
- return x.Title == y.Title && x.SubTitle == y.SubTitle;
+ return x.Title.Equals(y.Title, StringComparison.OrdinalIgnoreCase)
+ && string.Equals(x.SubTitle, y.SubTitle, StringComparison.OrdinalIgnoreCase);
}
public int GetHashCode(Result obj)
{
- return HashCode.Combine(obj.Title.GetHashCode(), obj.SubTitle?.GetHashCode() ?? 0);
+ return HashCode.Combine(obj.Title.ToLowerInvariant(), obj.SubTitle?.ToLowerInvariant() ?? "");
}
}
@@ -118,7 +119,7 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
{
throw new SearchException(engineName, e.Message, e);
}
-
+
results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any(
excludedPath => IsSubPathOf(r.SubTitle, excludedPath.Path)));
From 32268890b964e4e125ba81973541aa9588f05335 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 20:23:33 +0800
Subject: [PATCH 098/118] Remove TranslateEnvironmentVariablePath
---
.../Search/EnvironmentVariables.cs | 5 -----
.../Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 4 ++--
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index 3d6a1ad8a21..c17277112d9 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -60,11 +60,6 @@ internal static Dictionary LoadEnvironmentStringPaths()
return envStringPaths;
}
- internal static string TranslateEnvironmentVariablePath(string environmentVariablePath)
- {
- return Environment.ExpandEnvironmentVariables(environmentVariablePath);
- }
-
internal static List GetEnvironmentStringPathSuggestions(string querySearch, Query query, PluginInitContext context)
{
var results = new List();
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index da65091248c..25604cf2f9d 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -178,11 +178,11 @@ private async Task> PathSearchAsync(Query query, CancellationToken
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
-
+
var locationPath = querySearch;
if (isEnvironmentVariablePath)
- locationPath = EnvironmentVariables.TranslateEnvironmentVariablePath(locationPath);
+ locationPath = Environment.ExpandEnvironmentVariables(locationPath);
// Check that actual location exists, otherwise directory search will throw directory not found exception
if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath).LocationExists())
From ac92b93f669feb512a0ef0cb2ec1364f9b2b3377 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 20:29:25 +0800
Subject: [PATCH 099/118] Move IsSubPathOf to SharedCommands
---
.../SharedCommands/FilesFolders.cs | 17 +++++++++++++++++
.../Search/SearchManager.cs | 13 +------------
.../Programs/Win32.cs | 15 ++-------------
3 files changed, 20 insertions(+), 25 deletions(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index 5cb3a171a67..97d8c25d32d 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -241,5 +241,22 @@ public static string ReturnPreviousDirectoryIfIncompleteString(string path)
return path;
}
+
+ ///
+ /// Returns if is a sub path of .
+ /// From https://stackoverflow.com/a/66877016
+ ///
+ ///
+ ///
+ ///
+ public static bool IsSubPathOf(string subPath, string basePath)
+ {
+ var rel = Path.GetRelativePath(basePath, subPath);
+ return rel != "."
+ && rel != ".."
+ && !rel.StartsWith("../")
+ && !rel.StartsWith(@"..\")
+ && !Path.IsPathRooted(rel);
+ }
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 25604cf2f9d..324832990b0 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -121,7 +121,7 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
}
results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any(
- excludedPath => IsSubPathOf(r.SubTitle, excludedPath.Path)));
+ excludedPath => FilesFolders.IsSubPathOf(r.SubTitle, excludedPath.Path)));
return results.ToList();
}
@@ -256,16 +256,5 @@ internal static bool IsEnvironmentVariableSearch(string search)
&& search != "%%"
&& !search.Contains('\\');
}
-
- // https://stackoverflow.com/a/66877016
- internal static bool IsSubPathOf(string subPath, string basePath)
- {
- var rel = Path.GetRelativePath(basePath, subPath);
- return rel != "."
- && rel != ".."
- && !rel.StartsWith("../")
- && !rel.StartsWith(@"..\")
- && !Path.IsPathRooted(rel);
- }
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index f678b6bc89c..28eb9832f29 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -471,7 +471,7 @@ private static IEnumerable PATHPrograms(string[] suffixes, string[] proto
var paths = pathEnv.Split(";", StringSplitOptions.RemoveEmptyEntries).DistinctBy(p => p.ToLowerInvariant());
- var toFilter = paths.Where(x => commonParents.All(parent => !IsSubPathOf(x, parent)))
+ var toFilter = paths.Where(x => commonParents.All(parent => !FilesFolders.IsSubPathOf(x, parent)))
.AsParallel()
.SelectMany(p => EnumerateProgramsInDir(p, suffixes, recursive: false));
@@ -763,17 +763,6 @@ public static void Dispose()
}
}
- // https://stackoverflow.com/a/66877016
- private static bool IsSubPathOf(string subPath, string basePath)
- {
- var rel = Path.GetRelativePath(basePath, subPath);
- return rel != "."
- && rel != ".."
- && !rel.StartsWith("../")
- && !rel.StartsWith(@"..\")
- && !Path.IsPathRooted(rel);
- }
-
private static List GetCommonParents(IEnumerable programSources)
{
// To avoid unnecessary io
@@ -785,7 +774,7 @@ private static List GetCommonParents(IEnumerable programS
HashSet parents = group.ToHashSet();
foreach (var source in group)
{
- if (parents.Any(p => IsSubPathOf(source.Location, p.Location) &&
+ if (parents.Any(p => FilesFolders.IsSubPathOf(source.Location, p.Location) &&
source != p))
{
parents.Remove(source);
From beb144956c2d1c6163a5dd7f96486f5edd80c2a5 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 21:33:09 +0800
Subject: [PATCH 100/118] Rename method and add option to allow equality
---
.../SharedCommands/FilesFolders.cs | 14 +++++++-------
.../Search/SearchManager.cs | 2 +-
.../Flow.Launcher.Plugin.Program/Programs/Win32.cs | 7 +++----
3 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index 97d8c25d32d..c59f055980e 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -1,7 +1,6 @@
using System;
using System.Diagnostics;
using System.IO;
-using System.Windows;
namespace Flow.Launcher.Plugin.SharedCommands
{
@@ -243,16 +242,17 @@ public static string ReturnPreviousDirectoryIfIncompleteString(string path)
}
///
- /// Returns if is a sub path of .
+ /// Returns if contains .
/// From https://stackoverflow.com/a/66877016
///
- ///
- ///
+ /// Parent path
+ /// Sub path
+ /// If , when and are equal, returns
///
- public static bool IsSubPathOf(string subPath, string basePath)
+ public static bool PathContains(string parentPath, string subPath, bool allowEqual = false)
{
- var rel = Path.GetRelativePath(basePath, subPath);
- return rel != "."
+ var rel = Path.GetRelativePath(parentPath, subPath);
+ return (rel != "." || allowEqual)
&& rel != ".."
&& !rel.StartsWith("../")
&& !rel.StartsWith(@"..\")
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 324832990b0..3a1dc37266f 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -121,7 +121,7 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
}
results.RemoveWhere(r => Settings.IndexSearchExcludedSubdirectoryPaths.Any(
- excludedPath => FilesFolders.IsSubPathOf(r.SubTitle, excludedPath.Path)));
+ excludedPath => FilesFolders.PathContains(excludedPath.Path, r.SubTitle)));
return results.ToList();
}
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index 28eb9832f29..e0079967ba3 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -470,8 +470,8 @@ private static IEnumerable PATHPrograms(string[] suffixes, string[] proto
}
var paths = pathEnv.Split(";", StringSplitOptions.RemoveEmptyEntries).DistinctBy(p => p.ToLowerInvariant());
-
- var toFilter = paths.Where(x => commonParents.All(parent => !FilesFolders.IsSubPathOf(x, parent)))
+
+ var toFilter = paths.Where(x => commonParents.All(parent => !FilesFolders.PathContains(parent, x)))
.AsParallel()
.SelectMany(p => EnumerateProgramsInDir(p, suffixes, recursive: false));
@@ -774,8 +774,7 @@ private static List GetCommonParents(IEnumerable programS
HashSet parents = group.ToHashSet();
foreach (var source in group)
{
- if (parents.Any(p => FilesFolders.IsSubPathOf(source.Location, p.Location) &&
- source != p))
+ if (parents.Any(p => FilesFolders.PathContains(p.Location, source.Location)))
{
parents.Remove(source);
}
From b42fc54b806285067dd2c22cf600fd22c174c3b7 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 21:33:21 +0800
Subject: [PATCH 101/118] Add test for PathContains()
---
Flow.Launcher.Test/FilesFoldersTest.cs | 53 ++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
create mode 100644 Flow.Launcher.Test/FilesFoldersTest.cs
diff --git a/Flow.Launcher.Test/FilesFoldersTest.cs b/Flow.Launcher.Test/FilesFoldersTest.cs
new file mode 100644
index 00000000000..65639559173
--- /dev/null
+++ b/Flow.Launcher.Test/FilesFoldersTest.cs
@@ -0,0 +1,53 @@
+using Flow.Launcher.Plugin.SharedCommands;
+using NUnit.Framework;
+
+namespace Flow.Launcher.Test
+{
+ [TestFixture]
+
+ public class FilesFoldersTest
+ {
+ // Testcases from https://stackoverflow.com/a/31941905/20703207
+ // Disk
+ [TestCase(@"c:", @"c:\foo", true)]
+ [TestCase(@"c:\", @"c:\foo", true)]
+ // Slash
+ [TestCase(@"c:\foo\bar\", @"c:\foo\", false)]
+ [TestCase(@"c:\foo\bar", @"c:\foo\", false)]
+ [TestCase(@"c:\foo", @"c:\foo\bar", true)]
+ [TestCase(@"c:\foo\", @"c:\foo\bar", true)]
+ // File
+ [TestCase(@"c:\foo", @"c:\foo\a.txt", true)]
+ [TestCase(@"c:\foo", @"c:/foo/a.txt", true)]
+ [TestCase(@"c:\FOO\a.txt", @"c:\foo", false)]
+ [TestCase(@"c:\foo\a.txt", @"c:\foo\", false)]
+ [TestCase(@"c:\foobar\a.txt", @"c:\foo", false)]
+ [TestCase(@"c:\foobar\a.txt", @"c:\foo\", false)]
+ [TestCase(@"c:\foo\", @"c:\foo.txt", false)]
+ // Prefix
+ [TestCase(@"c:\foo", @"c:\foobar", false)]
+ [TestCase(@"C:\Program", @"C:\Program Files\", false)]
+ [TestCase(@"c:\foobar", @"c:\foo\a.txt", false)]
+ [TestCase(@"c:\foobar\", @"c:\foo\a.txt", false)]
+ // Edge case
+ [TestCase(@"c:\foo", @"c:\foo\..\bar\baz", false)]
+ [TestCase(@"c:\bar", @"c:\foo\..\bar\baz", true)]
+ [TestCase(@"c:\barr", @"c:\foo\..\bar\baz", false)]
+ // Equality
+ [TestCase(@"c:\foo", @"c:\foo", false)]
+ [TestCase(@"c:\foo\", @"c:\foo", false)]
+ [TestCase(@"c:\foo", @"c:\foo\", false)]
+ public void TestPathContains(string parentPath, string path, bool expectedResult)
+ {
+ Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path));
+ }
+
+ [TestCase(@"c:\foo", @"c:\foo", true)]
+ [TestCase(@"c:\foo\", @"c:\foo", true)]
+ [TestCase(@"c:\foo\", @"c:\foo", true)]
+ public void TestPathContainsWhenEqual(string parentPath, string path, bool expectedResult)
+ {
+ Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, true));
+ }
+ }
+}
From 4bea50d4cf9c738f03440e03d21f9801227b51ec Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 23:16:12 +0800
Subject: [PATCH 102/118] Add unit test for PathEqualityComparator
---
Flow.Launcher.Test/FilesFoldersTest.cs | 2 +-
Flow.Launcher.Test/Plugins/ExplorerTest.cs | 41 +++++++++++++++++++
.../Search/SearchManager.cs | 14 ++++---
3 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/Flow.Launcher.Test/FilesFoldersTest.cs b/Flow.Launcher.Test/FilesFoldersTest.cs
index 65639559173..a65cc600d92 100644
--- a/Flow.Launcher.Test/FilesFoldersTest.cs
+++ b/Flow.Launcher.Test/FilesFoldersTest.cs
@@ -44,7 +44,7 @@ public void TestPathContains(string parentPath, string path, bool expectedResult
[TestCase(@"c:\foo", @"c:\foo", true)]
[TestCase(@"c:\foo\", @"c:\foo", true)]
- [TestCase(@"c:\foo\", @"c:\foo", true)]
+ [TestCase(@"c:\foo", @"c:\foo\", true)]
public void TestPathContainsWhenEqual(string parentPath, string path, bool expectedResult)
{
Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, true));
diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
index 4075947ffb3..322441247be 100644
--- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs
+++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
@@ -7,9 +7,11 @@
using NUnit.Framework;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
+using static Flow.Launcher.Plugin.Explorer.Search.SearchManager;
namespace Flow.Launcher.Test.Plugins
{
@@ -394,5 +396,44 @@ public void GivenQueryWithFileTypeResult_WhenGetAutoComplete_ThenResultShouldBeE
// Then
Assert.AreEqual(result, expectedResult);
}
+
+ [TestCase(@"c:\foo", @"c:\foo", true)]
+ [TestCase(@"C:\Foo\", @"c:\foo\", true)]
+ [TestCase(@"c:\foo", @"c:\foo\", false)]
+ public void PathEqualityComparatorEquality(string path1, string path2, bool expectedResult)
+ {
+ var comparator = PathEqualityComparator.Instance;
+ var result1 = new Result
+ {
+ Title = Path.GetFileName(path1),
+ SubTitle = path1
+ };
+ var result2 = new Result
+ {
+ Title = Path.GetFileName(path2),
+ SubTitle = path2
+ };
+ Assert.AreEqual(expectedResult, comparator.Equals(result1, result2));
+ }
+
+ [TestCase(@"c:\foo\", @"c:\foo\")]
+ [TestCase(@"C:\Foo\", @"c:\foo\")]
+ public void PathEqualityComparatorHashCode(string path1, string path2)
+ {
+ var comparator = PathEqualityComparator.Instance;
+ var result1 = new Result
+ {
+ Title = Path.GetFileName(path1),
+ SubTitle = path1
+ };
+ var result2 = new Result
+ {
+ Title = Path.GetFileName(path2),
+ SubTitle = path2
+ };
+ var hash1 = comparator.GetHashCode(result1);
+ var hash2 = comparator.GetHashCode(result2);
+ Assert.IsTrue(hash1 == hash2);
+ }
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 3a1dc37266f..0a40590baea 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -8,7 +8,6 @@
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Plugin.Explorer.Exceptions;
-using System.IO;
namespace Flow.Launcher.Plugin.Explorer.Search
{
@@ -24,14 +23,17 @@ public SearchManager(Settings settings, PluginInitContext context)
Settings = settings;
}
- private class PathEqualityComparator : IEqualityComparer
+ ///
+ /// Note: Assuming all diretories end with "\".
+ ///
+ public class PathEqualityComparator : IEqualityComparer
{
private static PathEqualityComparator instance;
public static PathEqualityComparator Instance => instance ??= new PathEqualityComparator();
public bool Equals(Result x, Result y)
{
- return x.Title.Equals(y.Title, StringComparison.OrdinalIgnoreCase)
+ return x.Title.Equals(y.Title, StringComparison.OrdinalIgnoreCase)
&& string.Equals(x.SubTitle, y.SubTitle, StringComparison.OrdinalIgnoreCase);
}
@@ -178,7 +180,7 @@ private async Task> PathSearchAsync(Query query, CancellationToken
// Query is a location path with a full environment variable, eg. %appdata%\somefolder\
var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
-
+
var locationPath = querySearch;
if (isEnvironmentVariablePath)
@@ -249,10 +251,10 @@ private bool UseWindowsIndexForDirectorySearch(string locationPath)
x => FilesFolders.ReturnPreviousDirectoryIfIncompleteString(pathToDirectory).StartsWith(x.Path, StringComparison.OrdinalIgnoreCase))
&& WindowsIndex.WindowsIndex.PathIsIndexed(pathToDirectory);
}
-
+
internal static bool IsEnvironmentVariableSearch(string search)
{
- return search.StartsWith("%")
+ return search.StartsWith("%")
&& search != "%%"
&& !search.Contains('\\');
}
From 03f062ca34c49e6cb6223f867718436116969ddd Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Thu, 19 Jan 2023 23:26:10 +0800
Subject: [PATCH 103/118] Fix build error
---
Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index c59f055980e..2ccc35884de 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -1,6 +1,9 @@
using System;
using System.Diagnostics;
using System.IO;
+#if !DEBUG
+using System.Windows;
+#endif
namespace Flow.Launcher.Plugin.SharedCommands
{
From fefb1378704291ae6e70ee8691640718333ac2f0 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Fri, 20 Jan 2023 07:45:39 +1100
Subject: [PATCH 104/118] fix test format
---
Flow.Launcher.Test/Plugins/ExplorerTest.cs | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
index 322441247be..70c13f296dd 100644
--- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs
+++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
@@ -400,8 +400,9 @@ public void GivenQueryWithFileTypeResult_WhenGetAutoComplete_ThenResultShouldBeE
[TestCase(@"c:\foo", @"c:\foo", true)]
[TestCase(@"C:\Foo\", @"c:\foo\", true)]
[TestCase(@"c:\foo", @"c:\foo\", false)]
- public void PathEqualityComparatorEquality(string path1, string path2, bool expectedResult)
+ public void GivenTwoPaths_WhenCompared_ThenShouldBeExpectedSameOrDifferent(string path1, string path2, bool expectedResult)
{
+ // Given
var comparator = PathEqualityComparator.Instance;
var result1 = new Result
{
@@ -413,13 +414,16 @@ public void PathEqualityComparatorEquality(string path1, string path2, bool expe
Title = Path.GetFileName(path2),
SubTitle = path2
};
+
+ // When, Then
Assert.AreEqual(expectedResult, comparator.Equals(result1, result2));
}
[TestCase(@"c:\foo\", @"c:\foo\")]
[TestCase(@"C:\Foo\", @"c:\foo\")]
- public void PathEqualityComparatorHashCode(string path1, string path2)
+ public void GivenTwoPaths_WhenComparedHasCode_ThenShouldBeSame(string path1, string path2)
{
+ // Given
var comparator = PathEqualityComparator.Instance;
var result1 = new Result
{
@@ -431,8 +435,11 @@ public void PathEqualityComparatorHashCode(string path1, string path2)
Title = Path.GetFileName(path2),
SubTitle = path2
};
+
var hash1 = comparator.GetHashCode(result1);
var hash2 = comparator.GetHashCode(result2);
+
+ // When, Then
Assert.IsTrue(hash1 == hash2);
}
}
From b77bfea8875be532cafacfcefce6a14c34023ea6 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Fri, 20 Jan 2023 07:55:16 +1100
Subject: [PATCH 105/118] update test name
---
Flow.Launcher.Test/FilesFoldersTest.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Flow.Launcher.Test/FilesFoldersTest.cs b/Flow.Launcher.Test/FilesFoldersTest.cs
index a65cc600d92..d1682605377 100644
--- a/Flow.Launcher.Test/FilesFoldersTest.cs
+++ b/Flow.Launcher.Test/FilesFoldersTest.cs
@@ -1,4 +1,4 @@
-using Flow.Launcher.Plugin.SharedCommands;
+using Flow.Launcher.Plugin.SharedCommands;
using NUnit.Framework;
namespace Flow.Launcher.Test
@@ -37,7 +37,7 @@ public class FilesFoldersTest
[TestCase(@"c:\foo", @"c:\foo", false)]
[TestCase(@"c:\foo\", @"c:\foo", false)]
[TestCase(@"c:\foo", @"c:\foo\", false)]
- public void TestPathContains(string parentPath, string path, bool expectedResult)
+ public void GivenTwoPaths_WhenCheckPathContains_ThenShouldBeExpectedResult(string parentPath, string path, bool expectedResult)
{
Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path));
}
@@ -45,7 +45,7 @@ public void TestPathContains(string parentPath, string path, bool expectedResult
[TestCase(@"c:\foo", @"c:\foo", true)]
[TestCase(@"c:\foo\", @"c:\foo", true)]
[TestCase(@"c:\foo", @"c:\foo\", true)]
- public void TestPathContainsWhenEqual(string parentPath, string path, bool expectedResult)
+ public void GivenTwoPathsAreTheSame_WhenCheckPathContains_ThenShouldBeTrue(string parentPath, string path, bool expectedResult)
{
Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, true));
}
From 768ed4f80a2b7f83530ff7698cdc0fb30a87fe59 Mon Sep 17 00:00:00 2001
From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 12:13:02 +0800
Subject: [PATCH 106/118] Update wording
Co-authored-by: Jeremy Wu
---
Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 0a40590baea..916399e5cad 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -24,7 +24,7 @@ public SearchManager(Settings settings, PluginInitContext context)
}
///
- /// Note: Assuming all diretories end with "\".
+ /// Note: A path that ends with "\" and one that doesn't will not be regarded as equal.
///
public class PathEqualityComparator : IEqualityComparer
{
From 504fb4ae0588735635955ac5a580e01baafc6175 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 14:02:04 +0800
Subject: [PATCH 107/118] Display environment vars in upper case
---
.../Search/EnvironmentVariables.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index c17277112d9..130de2ab17f 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -52,8 +52,8 @@ internal static Dictionary LoadEnvironmentStringPaths()
path = Path.IsPathFullyQualified(path) ? path : Path.GetFullPath(path);
// Variables are returned with a mixture of all upper/lower case.
- // Call ToLower() to make the results look consistent
- envStringPaths.Add(special.Key.ToString().ToLower(), path);
+ // Call ToUpper() to make the results look consistent
+ envStringPaths.Add(special.Key.ToString().ToUpper(), path);
}
}
From 4d267fe71ee0f3aeb88f8781cb9aa4f5739cb49d Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 14:27:12 +0800
Subject: [PATCH 108/118] Fix incorrect %homepath% parsing
Parse environment variables before checking path existence
---
.../SharedCommands/FilesFolders.cs | 10 ++++++++++
.../Search/EnvironmentVariables.cs | 20 ++++++++++---------
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index 2ccc35884de..42a0e0c7308 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -261,5 +261,15 @@ public static bool PathContains(string parentPath, string subPath, bool allowEqu
&& !rel.StartsWith(@"..\")
&& !Path.IsPathRooted(rel);
}
+
+ ///
+ /// Returns path ended with "\"
+ ///
+ ///
+ ///
+ public static string EnsureTrailingSlash(this string path)
+ {
+ return path.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;
+ }
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index 130de2ab17f..a649de58edc 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -2,7 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
-using System.Text;
+using Flow.Launcher.Plugin.SharedCommands;
namespace Flow.Launcher.Plugin.Explorer.Search
{
@@ -37,20 +37,22 @@ internal static bool BeginsWithEnvironmentVar(string search)
internal static Dictionary LoadEnvironmentStringPaths()
{
var envStringPaths = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
+ var homedrive = Environment.GetEnvironmentVariable("HOMEDRIVE")?.EnsureTrailingSlash() ?? "C:\\";
foreach (DictionaryEntry special in Environment.GetEnvironmentVariables())
{
var path = special.Value.ToString();
- if (Directory.Exists(path))
- {
- // we add a trailing slash to the path to make sure drive paths become valid absolute paths.
- // for example, if %systemdrive% is C: we turn it to C:\
- path = path.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar;
+ // we add a trailing slash to the path to make sure drive paths become valid absolute paths.
+ // for example, if %systemdrive% is C: we turn it to C:\
+ path = path.EnsureTrailingSlash();
- // if we don't have an absolute path, we use Path.GetFullPath to get one.
- // for example, if %homepath% is \Users\John we turn it to C:\Users\John
- path = Path.IsPathFullyQualified(path) ? path : Path.GetFullPath(path);
+ // if we don't have an absolute path, we use Path.GetFullPath to get one.
+ // for example, if %homepath% is \Users\John we turn it to C:\Users\John
+ // Add basepath for GetFullPath() to parse %HOMEPATH% correctly
+ path = Path.IsPathFullyQualified(path) ? path : Path.GetFullPath(path, homedrive);
+ if (Directory.Exists(path))
+ {
// Variables are returned with a mixture of all upper/lower case.
// Call ToUpper() to make the results look consistent
envStringPaths.Add(special.Key.ToString().ToUpper(), path);
From 966d3e752efc3f7e52a83bfb3d8e46b62478c6fc Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 15:03:40 +0800
Subject: [PATCH 109/118] Fix environment variable expansion logic
---
Flow.Launcher.Test/Plugins/ExplorerTest.cs | 17 +++++++++++++++++
.../Search/EnvironmentVariables.cs | 10 ++++++++--
.../Search/SearchManager.cs | 14 ++++----------
3 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
index 70c13f296dd..e9d37433f4e 100644
--- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs
+++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs
@@ -442,5 +442,22 @@ public void GivenTwoPaths_WhenComparedHasCode_ThenShouldBeSame(string path1, str
// When, Then
Assert.IsTrue(hash1 == hash2);
}
+
+ [TestCase(@"%appdata%", true)]
+ [TestCase(@"%appdata%\123", true)]
+ [TestCase(@"c:\foo %appdata%\", false)]
+ [TestCase(@"c:\users\%USERNAME%\downloads", true)]
+ [TestCase(@"c:\downloads", false)]
+ [TestCase(@"%", false)]
+ [TestCase(@"%%", false)]
+ [TestCase(@"%bla%blabla%", false)]
+ public void GivenPath_WhenHavingEnvironmentVariableOrNot_ThenShouldBeExpected(string path, bool expectedResult)
+ {
+ // When
+ var result = EnvironmentVariables.HasEnvironmentVar(path);
+
+ // Then
+ Assert.AreEqual(result, expectedResult);
+ }
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index a649de58edc..5b0a5a8bdbe 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using Flow.Launcher.Plugin.SharedCommands;
namespace Flow.Launcher.Plugin.Explorer.Search
@@ -29,9 +30,14 @@ internal static bool IsEnvironmentVariableSearch(string search)
&& EnvStringPaths.Count > 0;
}
- internal static bool BeginsWithEnvironmentVar(string search)
+ public static bool HasEnvironmentVar(string search)
{
- return search[0] == '%' && search[1..].Contains("%\\");
+ // "c:\foo %appdata%\" returns false
+ var splited = search.Split(Path.DirectorySeparatorChar);
+ return splited.Any(dir => dir.StartsWith('%') &&
+ dir.EndsWith('%') &&
+ dir.Length > 2 &&
+ dir.Split('%').Length == 3);
}
internal static Dictionary LoadEnvironmentStringPaths()
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 916399e5cad..83057ff0413 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -173,18 +173,12 @@ private async Task> PathSearchAsync(Query query, CancellationToken
var results = new HashSet(PathEqualityComparator.Instance);
- var isEnvironmentVariable = EnvironmentVariables.IsEnvironmentVariableSearch(querySearch);
-
- if (isEnvironmentVariable)
+ if (EnvironmentVariables.IsEnvironmentVariableSearch(querySearch))
return EnvironmentVariables.GetEnvironmentStringPathSuggestions(querySearch, query, Context);
- // Query is a location path with a full environment variable, eg. %appdata%\somefolder\
- var isEnvironmentVariablePath = EnvironmentVariables.BeginsWithEnvironmentVar(querySearch);
-
- var locationPath = querySearch;
-
- if (isEnvironmentVariablePath)
- locationPath = Environment.ExpandEnvironmentVariables(locationPath);
+ // Query is a location path with a full environment variable, eg. %appdata%\somefolder\, c:\users\%USERNAME%\downloads
+ var needToExpand = EnvironmentVariables.HasEnvironmentVar(querySearch);
+ var locationPath = needToExpand ? Environment.ExpandEnvironmentVariables(querySearch) : querySearch;
// Check that actual location exists, otherwise directory search will throw directory not found exception
if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath).LocationExists())
From 71a2f996dbff2c92b219aa5641af01ef50870622 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 15:27:19 +0800
Subject: [PATCH 110/118] Set environment var dict in
LoadEnvironmentStringPaths()
---
.../Search/EnvironmentVariables.cs | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
index 5b0a5a8bdbe..e526fb85a1f 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs
@@ -16,7 +16,7 @@ private static Dictionary EnvStringPaths
{
if (_envStringPaths == null)
{
- _envStringPaths = LoadEnvironmentStringPaths();
+ LoadEnvironmentStringPaths();
}
return _envStringPaths;
}
@@ -40,9 +40,9 @@ public static bool HasEnvironmentVar(string search)
dir.Split('%').Length == 3);
}
- internal static Dictionary LoadEnvironmentStringPaths()
+ private static void LoadEnvironmentStringPaths()
{
- var envStringPaths = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
+ _envStringPaths = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
var homedrive = Environment.GetEnvironmentVariable("HOMEDRIVE")?.EnsureTrailingSlash() ?? "C:\\";
foreach (DictionaryEntry special in Environment.GetEnvironmentVariables())
@@ -61,11 +61,9 @@ internal static Dictionary LoadEnvironmentStringPaths()
{
// Variables are returned with a mixture of all upper/lower case.
// Call ToUpper() to make the results look consistent
- envStringPaths.Add(special.Key.ToString().ToUpper(), path);
+ _envStringPaths.Add(special.Key.ToString().ToUpper(), path);
}
}
-
- return envStringPaths;
}
internal static List GetEnvironmentStringPathSuggestions(string querySearch, Query query, PluginInitContext context)
From b739bb49d307e3d1d058bd3504e43139e260bbf3 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Fri, 20 Jan 2023 15:36:14 +0800
Subject: [PATCH 111/118] Fix CI test failure
---
Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index 42a0e0c7308..a6cf0755cc0 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -254,7 +254,7 @@ public static string ReturnPreviousDirectoryIfIncompleteString(string path)
///
public static bool PathContains(string parentPath, string subPath, bool allowEqual = false)
{
- var rel = Path.GetRelativePath(parentPath, subPath);
+ var rel = Path.GetRelativePath(parentPath.EnsureTrailingSlash(), subPath);
return (rel != "." || allowEqual)
&& rel != ".."
&& !rel.StartsWith("../")
From f31d21a7a42624412620d662efedf2cfeef5c837 Mon Sep 17 00:00:00 2001
From: DB p
Date: Sat, 21 Jan 2023 15:05:12 +0900
Subject: [PATCH 112/118] Add Maximum/Minimum Value with numberbox
---
Flow.Launcher/PriorityChangeWindow.xaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml
index d6aadead9b1..c917eeffc54 100644
--- a/Flow.Launcher/PriorityChangeWindow.xaml
+++ b/Flow.Launcher/PriorityChangeWindow.xaml
@@ -85,6 +85,8 @@
Date: Sat, 21 Jan 2023 16:57:41 +0800
Subject: [PATCH 113/118] Return empty when operation canceled
---
Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 83057ff0413..51c4c3d9d54 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -111,7 +111,7 @@ when ActionKeywordMatch(query, Settings.ActionKeyword.IndexSearchActionKeyword)
}
catch (OperationCanceledException)
{
- return results.ToList();
+ return new List();
}
catch (EngineNotAvailableException)
{
From babffe907f2a320b6e05bfe798c32d07d96c71d2 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sun, 22 Jan 2023 12:59:32 +0800
Subject: [PATCH 114/118] Disable unused import warning
---
Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index a6cf0755cc0..cfcaaa44da4 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -1,9 +1,9 @@
using System;
using System.Diagnostics;
using System.IO;
-#if !DEBUG
+#pragma warning disable IDE0005
using System.Windows;
-#endif
+#pragma warning restore IDE0005
namespace Flow.Launcher.Plugin.SharedCommands
{
From dd02ad37bc2a620b3493614b649cbd386e7a3276 Mon Sep 17 00:00:00 2001
From: Vic <10308169+VictoriousRaptor@users.noreply.github.com>
Date: Sun, 22 Jan 2023 13:21:53 +0800
Subject: [PATCH 115/118] Refactor
---
Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
index cfcaaa44da4..bd8d32ff511 100644
--- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
+++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs
@@ -208,22 +208,16 @@ public static bool IsLocationPathString(this string querySearchString)
///
public static string GetPreviousExistingDirectory(Func locationExists, string path)
{
- var previousDirectoryPath = "";
var index = path.LastIndexOf('\\');
if (index > 0 && index < (path.Length - 1))
{
- previousDirectoryPath = path.Substring(0, index + 1);
- if (!locationExists(previousDirectoryPath))
- {
- return "";
- }
+ string previousDirectoryPath = path.Substring(0, index + 1);
+ return locationExists(previousDirectoryPath) ? previousDirectoryPath : "";
}
else
{
return "";
}
-
- return previousDirectoryPath;
}
///
From d16a249e3616e6017d4df276f932eb0c7bfabd22 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Mon, 23 Jan 2023 08:51:36 +1100
Subject: [PATCH 116/118] version bump plugins
---
Plugins/Flow.Launcher.Plugin.Explorer/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.Shell/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.Url/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json | 2 +-
Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json | 2 +-
8 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json
index df2e556e158..0d94d60d962 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json
@@ -10,7 +10,7 @@
"Name": "Explorer",
"Description": "Find and manage files and folders via Windows Search or Everything",
"Author": "Jeremy Wu",
- "Version": "2.1.0",
+ "Version": "2.2.0",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
index 694cb5f8df5..0d1ee5b1693 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
@@ -6,7 +6,7 @@
"Name": "Plugins Manager",
"Description": "Management of installing, uninstalling or updating Flow Launcher plugins",
"Author": "Jeremy Wu",
- "Version": "2.0.0",
+ "Version": "2.0.1",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json
index cd911943149..3d20c0a48b9 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json
@@ -4,7 +4,7 @@
"Name": "Program",
"Description": "Search programs in Flow.Launcher",
"Author": "qianlifeng",
- "Version": "2.1.0",
+ "Version": "2.2.0",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Program.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json
index 5885b10d7f1..2b80e513823 100644
--- a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json
@@ -4,7 +4,7 @@
"Name": "Shell",
"Description": "Provide executing commands from Flow Launcher",
"Author": "qianlifeng",
- "Version": "2.0.0",
+ "Version": "2.0.1",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json
index 0ce62c28c52..74c9d9030b1 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json
@@ -4,7 +4,7 @@
"Name": "System Commands",
"Description": "Provide System related commands. e.g. shutdown,lock, setting etc.",
"Author": "qianlifeng",
- "Version": "2.0.0",
+ "Version": "2.0.1",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.Url/plugin.json b/Plugins/Flow.Launcher.Plugin.Url/plugin.json
index aadaf5d70f0..48c184ec22e 100644
--- a/Plugins/Flow.Launcher.Plugin.Url/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Url/plugin.json
@@ -4,7 +4,7 @@
"Name": "URL",
"Description": "Open the typed URL from Flow Launcher",
"Author": "qianlifeng",
- "Version": "2.0.0",
+ "Version": "2.0.1",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Url.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json
index ccd06b3454a..fb1e31c1254 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json
@@ -26,7 +26,7 @@
"Name": "Web Searches",
"Description": "Provide the web search ability",
"Author": "qianlifeng",
- "Version": "2.0.1",
+ "Version": "2.0.2",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll",
diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json
index 0d8c7e19cda..428a96923d5 100644
--- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json
@@ -4,7 +4,7 @@
"Description": "Search settings inside Control Panel and Settings App",
"Name": "Windows Settings",
"Author": "TobiasSekan",
- "Version": "3.0.1",
+ "Version": "3.0.2",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll",
From 3db80b17e417625784353a595d4c7ebff47f379a Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Mon, 23 Jan 2023 08:53:18 +1100
Subject: [PATCH 117/118] version bump Flow
---
Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj | 8 ++++----
appveyor.yml | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
index 22c47ae34f1..fb07f8255c0 100644
--- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
+++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
@@ -14,10 +14,10 @@
- 3.0.1
- 3.0.1
- 3.0.1
- 3.0.1
+ 3.1.0
+ 3.1.0
+ 3.1.0
+ 3.1.0
Flow.Launcher.Plugin
Flow-Launcher
MIT
diff --git a/appveyor.yml b/appveyor.yml
index ad8ac42b4bb..a327fa3a984 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,4 +1,4 @@
-version: '1.11.0.{build}'
+version: '1.12.0.{build}'
init:
- ps: |
From f517343c11d6a5ae0d7b1ec9d6da5172873569e9 Mon Sep 17 00:00:00 2001
From: Jeremy Wu
Date: Mon, 23 Jan 2023 09:17:09 +1100
Subject: [PATCH 118/118] update error message
---
Flow.Launcher.Infrastructure/Storage/JsonStorage.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Flow.Launcher.Infrastructure/Storage/JsonStorage.cs b/Flow.Launcher.Infrastructure/Storage/JsonStorage.cs
index 20b2e4e2105..500b0829ee2 100644
--- a/Flow.Launcher.Infrastructure/Storage/JsonStorage.cs
+++ b/Flow.Launcher.Infrastructure/Storage/JsonStorage.cs
@@ -69,7 +69,7 @@ private T LoadDefault()
var data = JsonSerializer.Deserialize(File.ReadAllText(BackupFilePath));
if (data != null)
{
- Log.Info($"|JsonStorage.Load|Load backup file {BackupFilePath} successfully");
+ Log.Info($"|JsonStorage.Load|Failed to load settings.json, {BackupFilePath} restored successfully");
File.Replace(BackupFilePath, FilePath, null);
return data;
}