From c875ad527792b91c4dfdd682c14e42fc5a73d98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=98=E9=9F=AC=20=E5=BC=A0?= Date: Fri, 29 Jan 2021 18:40:51 +0800 Subject: [PATCH 1/2] Make most class in Explorer plugin become static class --- Flow.Launcher.Test/Plugins/ExplorerTest.cs | 4 +-- Plugins/Flow.Launcher.Plugin.Explorer/Main.cs | 1 + .../DirectoryInfo/DirectoryInfoSearch.cs | 19 +++++-------- .../Search/EnvironmentVariables.cs | 4 +-- .../Search/QuickAccessLinks/QuickAccess.cs | 21 +++++---------- .../Search/ResultManager.cs | 18 +++++++------ .../Search/SearchManager.cs | 27 ++++++------------- .../Search/WindowsIndex/IndexSearch.cs | 22 ++++++--------- 8 files changed, 43 insertions(+), 73 deletions(-) diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs index 0710babe368..3d0a9a64f73 100644 --- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs +++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs @@ -317,11 +317,9 @@ public void GivenWindowsIndexSearch_WhenSearchPatternHotKeyIsSearchAll_ThenQuery [TestCase("c:\\somefolder\\", "*")] public void GivenDirectoryInfoSearch_WhenSearchPatternHotKeyIsSearchAll_ThenSearchCriteriaShouldUseCriteriaString(string path, string expectedString) { - // Given - var criteriaConstructor = new DirectoryInfoSearch(new PluginInitContext()); //When - var resultString = criteriaConstructor.ConstructSearchCriteria(path); + var resultString = DirectoryInfoSearch.ConstructSearchCriteria(path); // Then Assert.IsTrue(resultString == expectedString, diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs index 8002369a408..ae7bf57d219 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs @@ -44,6 +44,7 @@ public async Task InitAsync(PluginInitContext context) contextMenu = new ContextMenu(Context, Settings, viewModel); searchManager = new SearchManager(Settings, Context); + ResultManager.Init(Context); } public List LoadContextMenus(Result selectedResult) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs index 5124f6fb324..acd960ef149 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs @@ -8,16 +8,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo { - public class DirectoryInfoSearch + public static class DirectoryInfoSearch { - private readonly ResultManager resultManager; - - public DirectoryInfoSearch(PluginInitContext context) - { - resultManager = new ResultManager(context); - } - - internal List TopLevelDirectorySearch(Query query, string search, CancellationToken token) + internal static List TopLevelDirectorySearch(Query query, string search, CancellationToken token) { var criteria = ConstructSearchCriteria(search); @@ -31,7 +24,7 @@ internal List TopLevelDirectorySearch(Query query, string search, Cancel return DirectorySearch(new EnumerationOptions(), query, search, criteria, token); // null will be passed as default } - public string ConstructSearchCriteria(string search) + public static string ConstructSearchCriteria(string search) { string incompleteName = ""; @@ -50,7 +43,7 @@ public string ConstructSearchCriteria(string search) return incompleteName; } - private List DirectorySearch(EnumerationOptions enumerationOption, Query query, string search, + private static List DirectorySearch(EnumerationOptions enumerationOption, Query query, string search, string searchCriteria, CancellationToken token) { var results = new List(); @@ -68,12 +61,12 @@ private List DirectorySearch(EnumerationOptions enumerationOption, Query { if (fileSystemInfo is System.IO.DirectoryInfo) { - folderList.Add(resultManager.CreateFolderResult(fileSystemInfo.Name, fileSystemInfo.FullName, + folderList.Add(ResultManager.CreateFolderResult(fileSystemInfo.Name, fileSystemInfo.FullName, fileSystemInfo.FullName, query, true, false)); } else { - fileList.Add(resultManager.CreateFileResult(fileSystemInfo.FullName, query, true, false)); + fileList.Add(ResultManager.CreateFileResult(fileSystemInfo.FullName, query, true, false)); } token.ThrowIfCancellationRequested(); diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs index 6a870f1496f..1e9815cb97b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs @@ -76,7 +76,7 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea { var expandedPath = environmentVariables[search]; - results.Add(new ResultManager(context).CreateFolderResult($"%{search}%", expandedPath, expandedPath, query)); + results.Add(ResultManager.CreateFolderResult($"%{search}%", expandedPath, expandedPath, query)); return results; } @@ -95,7 +95,7 @@ internal static List GetEnvironmentStringPathSuggestions(string querySea { if (p.Key.StartsWith(search, StringComparison.InvariantCultureIgnoreCase)) { - results.Add(new ResultManager(context).CreateFolderResult($"%{p.Key}%", p.Value, p.Value, query)); + results.Add(ResultManager.CreateFolderResult($"%{p.Key}%", p.Value, p.Value, query)); } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs index 270e8825a48..d71e9ab49a8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs @@ -4,16 +4,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks { - public class QuickAccess + internal static class QuickAccess { - private readonly ResultManager resultManager; - - public QuickAccess(PluginInitContext context) - { - resultManager = new ResultManager(context); - } - - internal List AccessLinkListMatched(Query query, List accessLinks) + internal static List AccessLinkListMatched(Query query, List accessLinks) { if (string.IsNullOrEmpty(query.Search)) return new List(); @@ -28,21 +21,21 @@ internal List AccessLinkListMatched(Query query, List access return queriedAccessLinks.Select(l => l.Type switch { - ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), - ResultType.File => resultManager.CreateFileResult(l.Path, query), + ResultType.Folder => ResultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), + ResultType.File => ResultManager.CreateFileResult(l.Path, query), _ => throw new ArgumentOutOfRangeException() }).ToList(); } - internal List AccessLinkListAll(Query query, List accessLinks) + internal static List AccessLinkListAll(Query query, List accessLinks) => accessLinks .OrderBy(x => x.Type) .ThenBy(x => x.Nickname) .Select(l => l.Type switch { - ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), - ResultType.File => resultManager.CreateFileResult(l.Path, query), + ResultType.Folder => ResultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), + ResultType.File => ResultManager.CreateFileResult(l.Path, query), _ => throw new ArgumentOutOfRangeException() }).ToList(); diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 24eb9972448..600b573cfe5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -4,19 +4,21 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Windows; namespace Flow.Launcher.Plugin.Explorer.Search { - public class ResultManager + public static class ResultManager { - private readonly PluginInitContext context; + private static PluginInitContext Context; - public ResultManager(PluginInitContext context) + public static void Init(PluginInitContext context) { - this.context = context; + Context = context; } - internal Result CreateFolderResult(string title, string subtitle, string path, Query query, bool showIndexState = false, bool windowsIndexed = false) + + internal static Result CreateFolderResult(string title, string subtitle, string path, Query query, bool showIndexState = false, bool windowsIndexed = false) { return new Result { @@ -41,7 +43,7 @@ internal Result CreateFolderResult(string title, string subtitle, string path, Q } string changeTo = path.EndsWith(Constants.DirectorySeperator) ? path : path + Constants.DirectorySeperator; - context.API.ChangeQuery(string.IsNullOrEmpty(query.ActionKeyword) ? + Context.API.ChangeQuery(string.IsNullOrEmpty(query.ActionKeyword) ? changeTo : query.ActionKeyword + " " + changeTo); return false; @@ -52,7 +54,7 @@ internal Result CreateFolderResult(string title, string subtitle, string path, Q }; } - internal Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed = false) + internal static Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed = false) { var retrievedDirectoryPath = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path); @@ -94,7 +96,7 @@ internal Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed = }; } - internal Result CreateFileResult(string filePath, Query query, bool showIndexState = false, bool windowsIndexed = false) + internal static Result CreateFileResult(string filePath, Query query, bool showIndexState = false, bool windowsIndexed = false) { var result = new Result { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index f8ba3a56fa0..2af09bf2cbb 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -14,21 +14,12 @@ public class SearchManager { private readonly PluginInitContext context; - private readonly IndexSearch indexSearch; - - private readonly QuickAccess quickAccess; - - private readonly ResultManager resultManager; - private readonly Settings settings; public SearchManager(Settings settings, PluginInitContext context) { this.context = context; - indexSearch = new IndexSearch(context); - resultManager = new ResultManager(context); this.settings = settings; - quickAccess = new QuickAccess(context); } internal async Task> SearchAsync(Query query, CancellationToken token) @@ -42,9 +33,9 @@ internal async Task> SearchAsync(Query query, CancellationToken tok // 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 quickaccessLinks = quickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks); + var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks); if (quickaccessLinks.Count > 0) results.AddRange(quickaccessLinks); @@ -75,7 +66,7 @@ internal async Task> SearchAsync(Query query, CancellationToken tok var useIndexSearch = UseWindowsIndexForDirectorySearch(locationPath); - results.Add(resultManager.CreateOpenCurrentFolderResult(locationPath, useIndexSearch)); + results.Add(ResultManager.CreateOpenCurrentFolderResult(locationPath, useIndexSearch)); token.ThrowIfCancellationRequested(); @@ -100,7 +91,7 @@ private async Task> WindowsIndexFileContentSearchAsync(Query query, if (string.IsNullOrEmpty(querySearchString)) return new List(); - return await indexSearch.WindowsIndexSearchAsync(querySearchString, + return await IndexSearch.WindowsIndexSearchAsync(querySearchString, queryConstructor.CreateQueryHelper().ConnectionString, queryConstructor.QueryForFileContentSearch, query, @@ -114,9 +105,7 @@ public bool IsFileContentSearch(string actionKeyword) private List DirectoryInfoClassSearch(Query query, string querySearch, CancellationToken token) { - var directoryInfoSearch = new DirectoryInfoSearch(context); - - return directoryInfoSearch.TopLevelDirectorySearch(query, querySearch, token); + return DirectoryInfoSearch.TopLevelDirectorySearch(query, querySearch, token); } public async Task> TopLevelDirectorySearchBehaviourAsync( @@ -137,7 +126,7 @@ private async Task> WindowsIndexFilesAndFoldersSearchAsync(Query qu { var queryConstructor = new QueryConstructor(settings); - return await indexSearch.WindowsIndexSearchAsync(querySearchString, + return await IndexSearch.WindowsIndexSearchAsync(querySearchString, queryConstructor.CreateQueryHelper().ConnectionString, queryConstructor.QueryForAllFilesAndFolders, query, @@ -148,7 +137,7 @@ private async Task> WindowsIndexTopLevelFolderSearchAsync(Query que { var queryConstructor = new QueryConstructor(settings); - return await indexSearch.WindowsIndexSearchAsync(path, + return await IndexSearch.WindowsIndexSearchAsync(path, queryConstructor.CreateQueryHelper().ConnectionString, queryConstructor.QueryForTopLevelDirectorySearch, query, @@ -167,7 +156,7 @@ private bool UseWindowsIndexForDirectorySearch(string locationPath) .StartsWith(x.Path, StringComparison.OrdinalIgnoreCase))) return false; - return indexSearch.PathIsIndexed(pathToDirectory); + return IndexSearch.PathIsIndexed(pathToDirectory); } } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs index 8480e6328c9..b1e1d762286 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs @@ -10,19 +10,13 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex { - internal class IndexSearch + internal static class IndexSearch { - private readonly ResultManager resultManager; // Reserved keywords in oleDB - private readonly string reservedStringPattern = @"^[`\@\#\^,\&\/\\\$\%_]+$"; + private const string reservedStringPattern = @"^[`\@\#\^,\&\/\\\$\%_]+$"; - internal IndexSearch(PluginInitContext context) - { - resultManager = new ResultManager(context); - } - - internal async Task> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, Query query, CancellationToken token) + internal async static Task> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, Query query, CancellationToken token) { var results = new List(); var fileResults = new List(); @@ -54,7 +48,7 @@ internal async Task> ExecuteWindowsIndexSearchAsync(string indexQue if (dataReaderResults.GetString(2) == "Directory") { - results.Add(resultManager.CreateFolderResult( + results.Add(ResultManager.CreateFolderResult( dataReaderResults.GetString(0), path, path, @@ -62,7 +56,7 @@ internal async Task> ExecuteWindowsIndexSearchAsync(string indexQue } else { - fileResults.Add(resultManager.CreateFileResult(path, query, true, true)); + fileResults.Add(ResultManager.CreateFileResult(path, query, true, true)); } } } @@ -88,7 +82,7 @@ internal async Task> ExecuteWindowsIndexSearchAsync(string indexQue return results; } - internal async Task> WindowsIndexSearchAsync(string searchString, string connectionString, + internal async static Task> WindowsIndexSearchAsync(string searchString, string connectionString, Func constructQuery, Query query, CancellationToken token) { @@ -102,14 +96,14 @@ internal async Task> WindowsIndexSearchAsync(string searchString, s } - internal bool PathIsIndexed(string path) + internal static bool PathIsIndexed(string path) { var csm = new CSearchManager(); var indexManager = csm.GetCatalog("SystemIndex").GetCrawlScopeManager(); return indexManager.IncludedInCrawlScope(path) > 0; } - private void LogException(string message, Exception e) + private static void LogException(string message, Exception e) { #if DEBUG // Please investigate and handle error from index search throw e; From 10c72cecc2c0c94c5adc1482e027ab1a3416edda Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Wed, 3 Feb 2021 09:02:38 +1100 Subject: [PATCH 2/2] version bump Explorer --- Plugins/Flow.Launcher.Plugin.Explorer/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index e9c8ef8735c..9aa54fb8392 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -7,7 +7,7 @@ "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.6.0", + "Version": "1.7.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",