diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml
index 031cb108b..b23931fcf 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml
@@ -12,6 +12,8 @@
Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword
The required service for Windows Index Search does not appear to be running
To fix this, start the Windows Search service. Select here to remove this warning
+ The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return
+ Explorer Alternative
Delete
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index c7b1b6180..d86007e74 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -14,12 +14,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{
internal static PluginInitContext Context;
- private readonly Settings settings;
+ internal static Settings Settings;
public SearchManager(Settings settings, PluginInitContext context)
{
Context = context;
- this.settings = settings;
+ Settings = settings;
}
private class PathEqualityComparator : IEqualityComparer
@@ -71,14 +71,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search
return allowedActionKeyword switch
{
- Settings.ActionKeyword.SearchActionKeyword => settings.SearchActionKeywordEnabled &&
- keyword == settings.SearchActionKeyword,
- Settings.ActionKeyword.PathSearchActionKeyword => settings.PathSearchKeywordEnabled &&
- keyword == settings.PathSearchActionKeyword,
+ Settings.ActionKeyword.SearchActionKeyword => Settings.SearchActionKeywordEnabled &&
+ keyword == Settings.SearchActionKeyword,
+ Settings.ActionKeyword.PathSearchActionKeyword => Settings.PathSearchKeywordEnabled &&
+ keyword == Settings.PathSearchActionKeyword,
Settings.ActionKeyword.FileContentSearchActionKeyword => keyword ==
- settings.FileContentSearchActionKeyword,
- Settings.ActionKeyword.IndexSearchActionKeyword => settings.IndexOnlySearchKeywordEnabled &&
- keyword == settings.IndexSearchActionKeyword
+ Settings.FileContentSearchActionKeyword,
+ Settings.ActionKeyword.IndexSearchActionKeyword => Settings.IndexOnlySearchKeywordEnabled &&
+ keyword == Settings.IndexSearchActionKeyword
};
}
@@ -88,11 +88,11 @@ namespace Flow.Launcher.Plugin.Explorer.Search
// This allows the user to type the assigned action keyword and only see the list of quick folder links
if (string.IsNullOrEmpty(query.Search))
- return QuickAccess.AccessLinkListAll(query, settings.QuickAccessLinks);
+ return QuickAccess.AccessLinkListAll(query, Settings.QuickAccessLinks);
var results = new HashSet(PathEqualityComparator.Instance);
- var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks);
+ var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks);
results.UnionWith(quickaccessLinks);
@@ -136,7 +136,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
private async Task> WindowsIndexFileContentSearchAsync(Query query, string querySearchString,
CancellationToken token)
{
- var queryConstructor = new QueryConstructor(settings);
+ var queryConstructor = new QueryConstructor(Settings);
if (string.IsNullOrEmpty(querySearchString))
return new List();
@@ -145,14 +145,14 @@ namespace Flow.Launcher.Plugin.Explorer.Search
querySearchString,
queryConstructor.CreateQueryHelper,
queryConstructor.QueryForFileContentSearch,
- settings.IndexSearchExcludedSubdirectoryPaths,
+ Settings.IndexSearchExcludedSubdirectoryPaths,
query,
token).ConfigureAwait(false);
}
public bool IsFileContentSearch(string actionKeyword)
{
- return actionKeyword == settings.FileContentSearchActionKeyword;
+ return actionKeyword == Settings.FileContentSearchActionKeyword;
}
private List DirectoryInfoClassSearch(Query query, string querySearch, CancellationToken token)
@@ -177,13 +177,13 @@ namespace Flow.Launcher.Plugin.Explorer.Search
private async Task> WindowsIndexFilesAndFoldersSearchAsync(Query query, string querySearchString,
CancellationToken token)
{
- var queryConstructor = new QueryConstructor(settings);
+ var queryConstructor = new QueryConstructor(Settings);
return await IndexSearch.WindowsIndexSearchAsync(
querySearchString,
queryConstructor.CreateQueryHelper,
queryConstructor.QueryForAllFilesAndFolders,
- settings.IndexSearchExcludedSubdirectoryPaths,
+ Settings.IndexSearchExcludedSubdirectoryPaths,
query,
token).ConfigureAwait(false);
}
@@ -191,12 +191,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search
private async Task> WindowsIndexTopLevelFolderSearchAsync(Query query, string path,
CancellationToken token)
{
- var queryConstructor = new QueryConstructor(settings);
+ var queryConstructor = new QueryConstructor(Settings);
return await IndexSearch.WindowsIndexSearchAsync(path,
queryConstructor.CreateQueryHelper,
queryConstructor.QueryForTopLevelDirectorySearch,
- settings.IndexSearchExcludedSubdirectoryPaths,
+ Settings.IndexSearchExcludedSubdirectoryPaths,
query,
token).ConfigureAwait(false);
}
@@ -205,10 +205,10 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{
var pathToDirectory = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath);
- if (!settings.UseWindowsIndexForDirectorySearch)
+ if (!Settings.UseWindowsIndexForDirectorySearch)
return false;
- if (settings.IndexSearchExcludedSubdirectoryPaths
+ if (Settings.IndexSearchExcludedSubdirectoryPaths
.Any(x => FilesFolders.ReturnPreviousDirectoryIfIncompleteString(pathToDirectory)
.StartsWith(x.Path, StringComparison.OrdinalIgnoreCase)))
return false;
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs
index c22b489e2..7890209db 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs
@@ -3,10 +3,12 @@ using Microsoft.Search.Interop;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
+using System.Linq;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
+using System.Windows;
namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
{
@@ -107,12 +109,43 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
catch (COMException)
{
// Occurs because the Windows Indexing (WSearch) is turned off in services and unable to be used by Explorer plugin
+ if (!SearchManager.Settings.WarnWindowsSearchServiceOff)
+ return new List();
+
+ var api = SearchManager.Context.API;
+
return new List
{
new Result
{
- Title = SearchManager.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"),
- SubTitle = SearchManager.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceFix"),
+ Title = api.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"),
+ SubTitle = api.GetTranslation("plugin_explorer_windowsSearchServiceFix"),
+ Action = c =>
+ {
+ SearchManager.Settings.WarnWindowsSearchServiceOff = false;
+
+ if (MessageBox.Show(string.Format(api.GetTranslation("plugin_explorer_alternative"), Environment.NewLine),
+ api.GetTranslation("plugin_explorer_alternative_title"),
+ MessageBoxButton.YesNo) == MessageBoxResult.Yes)
+ {
+ var pluginsManagerPlugins= api.GetAllPlugins().FirstOrDefault(x => x.Metadata.ID == "9f8f9b14-2518-4907-b211-35ab6290dee7");
+
+ api.ChangeQuery(string.Format("{0} install everything", pluginsManagerPlugins.Metadata.ActionKeywords[0]));
+ }
+ else
+ {
+ // Clears the warning message because same query string will not alter the displayed result list
+ api.ChangeQuery(string.Empty);
+
+ api.ChangeQuery(query.RawQuery);
+ }
+
+ var mainWindow = Application.Current.MainWindow;
+ mainWindow.Visibility = Visibility.Visible;
+ mainWindow.Focus();
+
+ return false;
+ },
IcoPath = Constants.ExplorerIconImagePath
}
};
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs
index 13f938dea..88656a401 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs
@@ -1,4 +1,4 @@
-using Flow.Launcher.Plugin.Explorer.Search;
+using Flow.Launcher.Plugin.Explorer.Search;
using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks;
using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption;
using System;
@@ -33,6 +33,8 @@ namespace Flow.Launcher.Plugin.Explorer
public bool IndexOnlySearchKeywordEnabled { get; set; }
+ public bool WarnWindowsSearchServiceOff { get; set; } = true;
+
internal enum ActionKeyword
{
SearchActionKeyword,