Skip to content

Commit 9c92219

Browse files
authored
Merge pull request #977 from Flow-Launcher/fixWebsearchNullPointer
Add null check before enumerating the enumerable
2 parents 53f4741 + e9d3a0d commit 9c92219

File tree

5 files changed

+34
-34
lines changed

5 files changed

+34
-34
lines changed

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

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
4141
var results = new List<Result>();
4242

4343
foreach (SearchSource searchSource in _settings.SearchSources.Where(o => (o.ActionKeyword == query.ActionKeyword ||
44-
o.ActionKeyword == SearchSourceGlobalPluginWildCardSign)
45-
&& o.Enabled))
44+
o.ActionKeyword == SearchSourceGlobalPluginWildCardSign)
45+
&& o.Enabled))
4646
{
4747
string keyword = string.Empty;
4848
keyword = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? query.ToString() : query.Search;
@@ -105,11 +105,11 @@ private async Task UpdateResultsFromSuggestionAsync(List<Result> results, string
105105
if (_settings.EnableSuggestion)
106106
{
107107
var suggestions = await SuggestionsAsync(keyword, subtitle, searchSource, token).ConfigureAwait(false);
108-
if (token.IsCancellationRequested || !suggestions.Any())
108+
var enumerable = suggestions?.ToList();
109+
if (token.IsCancellationRequested || enumerable is not { Count: > 0 })
109110
return;
110-
111-
112-
results.AddRange(suggestions);
111+
112+
results.AddRange(enumerable);
113113

114114
token.ThrowIfCancellationRequested();
115115
}
@@ -118,32 +118,32 @@ private async Task UpdateResultsFromSuggestionAsync(List<Result> results, string
118118
private async Task<IEnumerable<Result>> SuggestionsAsync(string keyword, string subtitle, SearchSource searchSource, CancellationToken token)
119119
{
120120
var source = _settings.SelectedSuggestion;
121-
if (source != null)
121+
if (source == null)
122122
{
123-
//Suggestions appear below actual result, and appear above global action keyword match if non-global;
124-
var score = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? scoreSuggestions : scoreSuggestions + 1;
123+
return new List<Result>();
124+
}
125+
//Suggestions appear below actual result, and appear above global action keyword match if non-global;
126+
var score = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? scoreSuggestions : scoreSuggestions + 1;
125127

126-
var suggestions = await source.Suggestions(keyword, token).ConfigureAwait(false);
128+
var suggestions = await source.SuggestionsAsync(keyword, token).ConfigureAwait(false);
127129

128-
token.ThrowIfCancellationRequested();
130+
token.ThrowIfCancellationRequested();
129131

130-
var resultsFromSuggestion = suggestions?.Select(o => new Result
132+
var resultsFromSuggestion = suggestions?.Select(o => new Result
133+
{
134+
Title = o,
135+
SubTitle = subtitle,
136+
Score = score,
137+
IcoPath = searchSource.IconPath,
138+
ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword,
139+
Action = c =>
131140
{
132-
Title = o,
133-
SubTitle = subtitle,
134-
Score = score,
135-
IcoPath = searchSource.IconPath,
136-
ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword,
137-
Action = c =>
138-
{
139-
_context.API.OpenUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)));
141+
_context.API.OpenUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)));
140142

141-
return true;
142-
}
143-
});
144-
return resultsFromSuggestion;
145-
}
146-
return new List<Result>();
143+
return true;
144+
}
145+
});
146+
return resultsFromSuggestion;
147147
}
148148

149149
public Task InitAsync(PluginInitContext context)
@@ -191,4 +191,4 @@ public string GetTranslatedPluginDescription()
191191

192192
public event ResultUpdatedEventHandler ResultsUpdated;
193193
}
194-
}
194+
}

Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/Baidu.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class Baidu : SuggestionSource
1616
{
1717
private readonly Regex _reg = new Regex("window.baidu.sug\\((.*)\\)");
1818

19-
public override async Task<List<string>> Suggestions(string query, CancellationToken token)
19+
public override async Task<List<string>> SuggestionsAsync(string query, CancellationToken token)
2020
{
2121
string result;
2222

@@ -25,7 +25,7 @@ public override async Task<List<string>> Suggestions(string query, CancellationT
2525
const string api = "http://suggestion.baidu.com/su?json=1&wd=";
2626
result = await Http.GetAsync(api + Uri.EscapeUriString(query), token).ConfigureAwait(false);
2727
}
28-
catch (Exception e) when (e is HttpRequestException || e.InnerException is TimeoutException)
28+
catch (Exception e) when (e is HttpRequestException or {InnerException: TimeoutException})
2929
{
3030
Log.Exception("|Baidu.Suggestions|Can't get suggestion from baidu", e);
3131
return null;

Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/Bing.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace Flow.Launcher.Plugin.WebSearch.SuggestionSources
1515
{
1616
class Bing : SuggestionSource
1717
{
18-
public override async Task<List<string>> Suggestions(string query, CancellationToken token)
18+
public override async Task<List<string>> SuggestionsAsync(string query, CancellationToken token)
1919
{
2020

2121
try
@@ -40,7 +40,7 @@ public override async Task<List<string>> Suggestions(string query, CancellationT
4040

4141

4242
}
43-
catch (Exception e) when (e is HttpRequestException || e.InnerException is TimeoutException)
43+
catch (Exception e) when (e is HttpRequestException or {InnerException: TimeoutException})
4444
{
4545
Log.Exception("|Baidu.Suggestions|Can't get suggestion from baidu", e);
4646
return null;

Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/Google.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Flow.Launcher.Plugin.WebSearch.SuggestionSources
1414
{
1515
public class Google : SuggestionSource
1616
{
17-
public override async Task<List<string>> Suggestions(string query, CancellationToken token)
17+
public override async Task<List<string>> SuggestionsAsync(string query, CancellationToken token)
1818
{
1919
try
2020
{
@@ -32,7 +32,7 @@ public override async Task<List<string>> Suggestions(string query, CancellationT
3232
return results.EnumerateArray().Select(o => o.GetString()).ToList();
3333

3434
}
35-
catch (Exception e) when (e is HttpRequestException || e.InnerException is TimeoutException)
35+
catch (Exception e) when (e is HttpRequestException or {InnerException: TimeoutException})
3636
{
3737
Log.Exception("|Baidu.Suggestions|Can't get suggestion from baidu", e);
3838
return null;

Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/SuggestionSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ namespace Flow.Launcher.Plugin.WebSearch.SuggestionSources
66
{
77
public abstract class SuggestionSource
88
{
9-
public abstract Task<List<string>> Suggestions(string query, CancellationToken token);
9+
public abstract Task<List<string>> SuggestionsAsync(string query, CancellationToken token);
1010
}
1111
}

0 commit comments

Comments
 (0)