Skip to content

Commit 1ec5023

Browse files
authored
Merge pull request #318 from taooceros/ResultManagerSingleton
Make most class in Explorer plugin become static class
2 parents 61d7f04 + 10c72ce commit 1ec5023

File tree

9 files changed

+44
-74
lines changed

9 files changed

+44
-74
lines changed

Flow.Launcher.Test/Plugins/ExplorerTest.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,9 @@ public void GivenWindowsIndexSearch_WhenSearchPatternHotKeyIsSearchAll_ThenQuery
317317
[TestCase("c:\\somefolder\\", "*")]
318318
public void GivenDirectoryInfoSearch_WhenSearchPatternHotKeyIsSearchAll_ThenSearchCriteriaShouldUseCriteriaString(string path, string expectedString)
319319
{
320-
// Given
321-
var criteriaConstructor = new DirectoryInfoSearch(new PluginInitContext());
322320

323321
//When
324-
var resultString = criteriaConstructor.ConstructSearchCriteria(path);
322+
var resultString = DirectoryInfoSearch.ConstructSearchCriteria(path);
325323

326324
// Then
327325
Assert.IsTrue(resultString == expectedString,

Plugins/Flow.Launcher.Plugin.Explorer/Main.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public async Task InitAsync(PluginInitContext context)
4444

4545
contextMenu = new ContextMenu(Context, Settings, viewModel);
4646
searchManager = new SearchManager(Settings, Context);
47+
ResultManager.Init(Context);
4748
}
4849

4950
public List<Result> LoadContextMenus(Result selectedResult)

Plugins/Flow.Launcher.Plugin.Explorer/Search/DirectoryInfo/DirectoryInfoSearch.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,9 @@
88

99
namespace Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo
1010
{
11-
public class DirectoryInfoSearch
11+
public static class DirectoryInfoSearch
1212
{
13-
private readonly ResultManager resultManager;
14-
15-
public DirectoryInfoSearch(PluginInitContext context)
16-
{
17-
resultManager = new ResultManager(context);
18-
}
19-
20-
internal List<Result> TopLevelDirectorySearch(Query query, string search, CancellationToken token)
13+
internal static List<Result> TopLevelDirectorySearch(Query query, string search, CancellationToken token)
2114
{
2215
var criteria = ConstructSearchCriteria(search);
2316

@@ -31,7 +24,7 @@ internal List<Result> TopLevelDirectorySearch(Query query, string search, Cancel
3124
return DirectorySearch(new EnumerationOptions(), query, search, criteria, token); // null will be passed as default
3225
}
3326

34-
public string ConstructSearchCriteria(string search)
27+
public static string ConstructSearchCriteria(string search)
3528
{
3629
string incompleteName = "";
3730

@@ -50,7 +43,7 @@ public string ConstructSearchCriteria(string search)
5043
return incompleteName;
5144
}
5245

53-
private List<Result> DirectorySearch(EnumerationOptions enumerationOption, Query query, string search,
46+
private static List<Result> DirectorySearch(EnumerationOptions enumerationOption, Query query, string search,
5447
string searchCriteria, CancellationToken token)
5548
{
5649
var results = new List<Result>();
@@ -68,12 +61,12 @@ private List<Result> DirectorySearch(EnumerationOptions enumerationOption, Query
6861
{
6962
if (fileSystemInfo is System.IO.DirectoryInfo)
7063
{
71-
folderList.Add(resultManager.CreateFolderResult(fileSystemInfo.Name, fileSystemInfo.FullName,
64+
folderList.Add(ResultManager.CreateFolderResult(fileSystemInfo.Name, fileSystemInfo.FullName,
7265
fileSystemInfo.FullName, query, true, false));
7366
}
7467
else
7568
{
76-
fileList.Add(resultManager.CreateFileResult(fileSystemInfo.FullName, query, true, false));
69+
fileList.Add(ResultManager.CreateFileResult(fileSystemInfo.FullName, query, true, false));
7770
}
7871

7972
token.ThrowIfCancellationRequested();

Plugins/Flow.Launcher.Plugin.Explorer/Search/EnvironmentVariables.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ internal static List<Result> GetEnvironmentStringPathSuggestions(string querySea
7676
{
7777
var expandedPath = environmentVariables[search];
7878

79-
results.Add(new ResultManager(context).CreateFolderResult($"%{search}%", expandedPath, expandedPath, query));
79+
results.Add(ResultManager.CreateFolderResult($"%{search}%", expandedPath, expandedPath, query));
8080

8181
return results;
8282
}
@@ -95,7 +95,7 @@ internal static List<Result> GetEnvironmentStringPathSuggestions(string querySea
9595
{
9696
if (p.Key.StartsWith(search, StringComparison.InvariantCultureIgnoreCase))
9797
{
98-
results.Add(new ResultManager(context).CreateFolderResult($"%{p.Key}%", p.Value, p.Value, query));
98+
results.Add(ResultManager.CreateFolderResult($"%{p.Key}%", p.Value, p.Value, query));
9999
}
100100
}
101101

Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,9 @@
44

55
namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks
66
{
7-
public class QuickAccess
7+
internal static class QuickAccess
88
{
9-
private readonly ResultManager resultManager;
10-
11-
public QuickAccess(PluginInitContext context)
12-
{
13-
resultManager = new ResultManager(context);
14-
}
15-
16-
internal List<Result> AccessLinkListMatched(Query query, List<AccessLink> accessLinks)
9+
internal static List<Result> AccessLinkListMatched(Query query, List<AccessLink> accessLinks)
1710
{
1811
if (string.IsNullOrEmpty(query.Search))
1912
return new List<Result>();
@@ -28,21 +21,21 @@ internal List<Result> AccessLinkListMatched(Query query, List<AccessLink> access
2821

2922
return queriedAccessLinks.Select(l => l.Type switch
3023
{
31-
ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query),
32-
ResultType.File => resultManager.CreateFileResult(l.Path, query),
24+
ResultType.Folder => ResultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query),
25+
ResultType.File => ResultManager.CreateFileResult(l.Path, query),
3326
_ => throw new ArgumentOutOfRangeException()
3427

3528
}).ToList();
3629
}
3730

38-
internal List<Result> AccessLinkListAll(Query query, List<AccessLink> accessLinks)
31+
internal static List<Result> AccessLinkListAll(Query query, List<AccessLink> accessLinks)
3932
=> accessLinks
4033
.OrderBy(x => x.Type)
4134
.ThenBy(x => x.Nickname)
4235
.Select(l => l.Type switch
4336
{
44-
ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query),
45-
ResultType.File => resultManager.CreateFileResult(l.Path, query),
37+
ResultType.Folder => ResultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query),
38+
ResultType.File => ResultManager.CreateFileResult(l.Path, query),
4639
_ => throw new ArgumentOutOfRangeException()
4740

4841
}).ToList();

Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,21 @@
44
using System.Diagnostics;
55
using System.IO;
66
using System.Linq;
7+
using System.Runtime.CompilerServices;
78
using System.Windows;
89

910
namespace Flow.Launcher.Plugin.Explorer.Search
1011
{
11-
public class ResultManager
12+
public static class ResultManager
1213
{
13-
private readonly PluginInitContext context;
14+
private static PluginInitContext Context;
1415

15-
public ResultManager(PluginInitContext context)
16+
public static void Init(PluginInitContext context)
1617
{
17-
this.context = context;
18+
Context = context;
1819
}
19-
internal Result CreateFolderResult(string title, string subtitle, string path, Query query, bool showIndexState = false, bool windowsIndexed = false)
20+
21+
internal static Result CreateFolderResult(string title, string subtitle, string path, Query query, bool showIndexState = false, bool windowsIndexed = false)
2022
{
2123
return new Result
2224
{
@@ -41,7 +43,7 @@ internal Result CreateFolderResult(string title, string subtitle, string path, Q
4143
}
4244

4345
string changeTo = path.EndsWith(Constants.DirectorySeperator) ? path : path + Constants.DirectorySeperator;
44-
context.API.ChangeQuery(string.IsNullOrEmpty(query.ActionKeyword) ?
46+
Context.API.ChangeQuery(string.IsNullOrEmpty(query.ActionKeyword) ?
4547
changeTo :
4648
query.ActionKeyword + " " + changeTo);
4749
return false;
@@ -52,7 +54,7 @@ internal Result CreateFolderResult(string title, string subtitle, string path, Q
5254
};
5355
}
5456

55-
internal Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed = false)
57+
internal static Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed = false)
5658
{
5759
var retrievedDirectoryPath = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path);
5860

@@ -94,7 +96,7 @@ internal Result CreateOpenCurrentFolderResult(string path, bool windowsIndexed =
9496
};
9597
}
9698

97-
internal Result CreateFileResult(string filePath, Query query, bool showIndexState = false, bool windowsIndexed = false)
99+
internal static Result CreateFileResult(string filePath, Query query, bool showIndexState = false, bool windowsIndexed = false)
98100
{
99101
var result = new Result
100102
{

Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,12 @@ public class SearchManager
1414
{
1515
private readonly PluginInitContext context;
1616

17-
private readonly IndexSearch indexSearch;
18-
19-
private readonly QuickAccess quickAccess;
20-
21-
private readonly ResultManager resultManager;
22-
2317
private readonly Settings settings;
2418

2519
public SearchManager(Settings settings, PluginInitContext context)
2620
{
2721
this.context = context;
28-
indexSearch = new IndexSearch(context);
29-
resultManager = new ResultManager(context);
3022
this.settings = settings;
31-
quickAccess = new QuickAccess(context);
3223
}
3324

3425
internal async Task<List<Result>> SearchAsync(Query query, CancellationToken token)
@@ -42,9 +33,9 @@ internal async Task<List<Result>> SearchAsync(Query query, CancellationToken tok
4233

4334
// This allows the user to type the assigned action keyword and only see the list of quick folder links
4435
if (string.IsNullOrEmpty(query.Search))
45-
return quickAccess.AccessLinkListAll(query, settings.QuickAccessLinks);
36+
return QuickAccess.AccessLinkListAll(query, settings.QuickAccessLinks);
4637

47-
var quickaccessLinks = quickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks);
38+
var quickaccessLinks = QuickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks);
4839

4940
if (quickaccessLinks.Count > 0)
5041
results.AddRange(quickaccessLinks);
@@ -75,7 +66,7 @@ internal async Task<List<Result>> SearchAsync(Query query, CancellationToken tok
7566

7667
var useIndexSearch = UseWindowsIndexForDirectorySearch(locationPath);
7768

78-
results.Add(resultManager.CreateOpenCurrentFolderResult(locationPath, useIndexSearch));
69+
results.Add(ResultManager.CreateOpenCurrentFolderResult(locationPath, useIndexSearch));
7970

8071
token.ThrowIfCancellationRequested();
8172

@@ -100,7 +91,7 @@ private async Task<List<Result>> WindowsIndexFileContentSearchAsync(Query query,
10091
if (string.IsNullOrEmpty(querySearchString))
10192
return new List<Result>();
10293

103-
return await indexSearch.WindowsIndexSearchAsync(querySearchString,
94+
return await IndexSearch.WindowsIndexSearchAsync(querySearchString,
10495
queryConstructor.CreateQueryHelper().ConnectionString,
10596
queryConstructor.QueryForFileContentSearch,
10697
query,
@@ -114,9 +105,7 @@ public bool IsFileContentSearch(string actionKeyword)
114105

115106
private List<Result> DirectoryInfoClassSearch(Query query, string querySearch, CancellationToken token)
116107
{
117-
var directoryInfoSearch = new DirectoryInfoSearch(context);
118-
119-
return directoryInfoSearch.TopLevelDirectorySearch(query, querySearch, token);
108+
return DirectoryInfoSearch.TopLevelDirectorySearch(query, querySearch, token);
120109
}
121110

122111
public async Task<List<Result>> TopLevelDirectorySearchBehaviourAsync(
@@ -137,7 +126,7 @@ private async Task<List<Result>> WindowsIndexFilesAndFoldersSearchAsync(Query qu
137126
{
138127
var queryConstructor = new QueryConstructor(settings);
139128

140-
return await indexSearch.WindowsIndexSearchAsync(querySearchString,
129+
return await IndexSearch.WindowsIndexSearchAsync(querySearchString,
141130
queryConstructor.CreateQueryHelper().ConnectionString,
142131
queryConstructor.QueryForAllFilesAndFolders,
143132
query,
@@ -148,7 +137,7 @@ private async Task<List<Result>> WindowsIndexTopLevelFolderSearchAsync(Query que
148137
{
149138
var queryConstructor = new QueryConstructor(settings);
150139

151-
return await indexSearch.WindowsIndexSearchAsync(path,
140+
return await IndexSearch.WindowsIndexSearchAsync(path,
152141
queryConstructor.CreateQueryHelper().ConnectionString,
153142
queryConstructor.QueryForTopLevelDirectorySearch,
154143
query,
@@ -167,7 +156,7 @@ private bool UseWindowsIndexForDirectorySearch(string locationPath)
167156
.StartsWith(x.Path, StringComparison.OrdinalIgnoreCase)))
168157
return false;
169158

170-
return indexSearch.PathIsIndexed(pathToDirectory);
159+
return IndexSearch.PathIsIndexed(pathToDirectory);
171160
}
172161
}
173162
}

Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,13 @@
1010

1111
namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
1212
{
13-
internal class IndexSearch
13+
internal static class IndexSearch
1414
{
15-
private readonly ResultManager resultManager;
1615

1716
// Reserved keywords in oleDB
18-
private readonly string reservedStringPattern = @"^[`\@\#\^,\&\/\\\$\%_]+$";
17+
private const string reservedStringPattern = @"^[`\@\#\^,\&\/\\\$\%_]+$";
1918

20-
internal IndexSearch(PluginInitContext context)
21-
{
22-
resultManager = new ResultManager(context);
23-
}
24-
25-
internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, Query query, CancellationToken token)
19+
internal async static Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, Query query, CancellationToken token)
2620
{
2721
var results = new List<Result>();
2822
var fileResults = new List<Result>();
@@ -54,15 +48,15 @@ internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQue
5448

5549
if (dataReaderResults.GetString(2) == "Directory")
5650
{
57-
results.Add(resultManager.CreateFolderResult(
51+
results.Add(ResultManager.CreateFolderResult(
5852
dataReaderResults.GetString(0),
5953
path,
6054
path,
6155
query, true, true));
6256
}
6357
else
6458
{
65-
fileResults.Add(resultManager.CreateFileResult(path, query, true, true));
59+
fileResults.Add(ResultManager.CreateFileResult(path, query, true, true));
6660
}
6761
}
6862
}
@@ -88,7 +82,7 @@ internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQue
8882
return results;
8983
}
9084

91-
internal async Task<List<Result>> WindowsIndexSearchAsync(string searchString, string connectionString,
85+
internal async static Task<List<Result>> WindowsIndexSearchAsync(string searchString, string connectionString,
9286
Func<string, string> constructQuery, Query query,
9387
CancellationToken token)
9488
{
@@ -102,14 +96,14 @@ internal async Task<List<Result>> WindowsIndexSearchAsync(string searchString, s
10296

10397
}
10498

105-
internal bool PathIsIndexed(string path)
99+
internal static bool PathIsIndexed(string path)
106100
{
107101
var csm = new CSearchManager();
108102
var indexManager = csm.GetCatalog("SystemIndex").GetCrawlScopeManager();
109103
return indexManager.IncludedInCrawlScope(path) > 0;
110104
}
111105

112-
private void LogException(string message, Exception e)
106+
private static void LogException(string message, Exception e)
113107
{
114108
#if DEBUG // Please investigate and handle error from index search
115109
throw e;

Plugins/Flow.Launcher.Plugin.Explorer/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"Name": "Explorer",
88
"Description": "Search and manage files and folders. Explorer utilises Windows Index Search",
99
"Author": "Jeremy Wu",
10-
"Version": "1.6.0",
10+
"Version": "1.7.0",
1111
"Language": "csharp",
1212
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
1313
"ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",

0 commit comments

Comments
 (0)