mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-08 20:27:36 +02:00
Fixed exceptions in indexer and delayed execution logic (#5912)
This commit is contained in:
@@ -28,26 +28,35 @@ namespace Microsoft.Plugin.Indexer.SearchHelper
|
|||||||
// open the connection
|
// open the connection
|
||||||
conn.Open();
|
conn.Open();
|
||||||
|
|
||||||
// now create an OleDB command object with the query we built above and the connection we just opened.
|
try
|
||||||
using (command = new OleDbCommand(sqlQuery, conn))
|
|
||||||
{
|
{
|
||||||
using (wDSResults = command.ExecuteReader())
|
// now create an OleDB command object with the query we built above and the connection we just opened.
|
||||||
|
using (command = new OleDbCommand(sqlQuery, conn))
|
||||||
{
|
{
|
||||||
if (!wDSResults.IsClosed && wDSResults.HasRows)
|
using (wDSResults = command.ExecuteReader())
|
||||||
{
|
{
|
||||||
while (!wDSResults.IsClosed && wDSResults.Read())
|
if (!wDSResults.IsClosed && wDSResults.HasRows)
|
||||||
{
|
{
|
||||||
List<object> fieldData = new List<object>();
|
while (!wDSResults.IsClosed && wDSResults.Read())
|
||||||
for (int i = 0; i < wDSResults.FieldCount; i++)
|
|
||||||
{
|
{
|
||||||
fieldData.Add(wDSResults.GetValue(i));
|
List<object> fieldData = new List<object>();
|
||||||
}
|
for (int i = 0; i < wDSResults.FieldCount; i++)
|
||||||
|
{
|
||||||
|
fieldData.Add(wDSResults.GetValue(i));
|
||||||
|
}
|
||||||
|
|
||||||
result.Add(new OleDBResult(fieldData));
|
result.Add(new OleDBResult(fieldData));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AccessViolationException can occur if another query is made before the current query completes. Since the old query would be cancelled we can ignore the exception
|
||||||
|
catch (System.AccessViolationException)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -512,33 +512,40 @@ namespace PowerLauncher.ViewModel
|
|||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
Parallel.ForEach(plugins, (plugin) =>
|
Parallel.ForEach(plugins, (plugin) =>
|
||||||
{
|
{
|
||||||
if (!plugin.Metadata.Disabled)
|
try
|
||||||
{
|
{
|
||||||
var results = PluginManager.QueryForPlugin(plugin, query, true);
|
if (!plugin.Metadata.Disabled)
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
|
||||||
if ((results?.Count ?? 0) != 0)
|
|
||||||
{
|
{
|
||||||
lock (_addResultsLock)
|
var results = PluginManager.QueryForPlugin(plugin, query, true);
|
||||||
{
|
|
||||||
if (query.RawQuery == _currentQuery.RawQuery)
|
|
||||||
{
|
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
// Remove the original results from the plugin
|
|
||||||
Results.Results.RemoveAll(r => r.Result.PluginID == plugin.Metadata.ID);
|
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
|
||||||
|
|
||||||
// Add the new results from the plugin
|
|
||||||
UpdateResultView(results, query, currentCancellationToken);
|
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
|
||||||
Results.Sort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
currentCancellationToken.ThrowIfCancellationRequested();
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
UpdateResultsListViewAfterQuery(query, true);
|
if ((results?.Count ?? 0) != 0)
|
||||||
|
{
|
||||||
|
lock (_addResultsLock)
|
||||||
|
{
|
||||||
|
if (query.RawQuery == _currentQuery.RawQuery)
|
||||||
|
{
|
||||||
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
// Remove the original results from the plugin
|
||||||
|
Results.Results.RemoveAll(r => r.Result.PluginID == plugin.Metadata.ID);
|
||||||
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
|
// Add the new results from the plugin
|
||||||
|
UpdateResultView(results, query, currentCancellationToken);
|
||||||
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
|
Results.Sort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentCancellationToken.ThrowIfCancellationRequested();
|
||||||
|
UpdateResultsListViewAfterQuery(query, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
// nothing to do here
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user