From 3885cbd04509b14222f89b5130dd3a2d16f4ec90 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 7 Apr 2020 17:52:03 -0700 Subject: [PATCH] single thread execution of the indexer plugin and InvalidOperationException due to connection being closed on ExecuteReader, handled separately --- .../Plugins/Wox.Plugin.Indexer/Main.cs | 6 +++++- .../SearchHelper/WindowsSearchAPI.cs | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs index 8d6af797e9..b547815e76 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs @@ -87,11 +87,15 @@ namespace Wox.Plugin.Indexer results.Add(r); } } + catch(InvalidOperationException) + { + //The connection has closed, internal error of ExecuteReader() + //Not showing this exception to the users + } catch (Exception ex) { results.Add(new Result { - // TODO: Localize the string Title = ex.ToString(), IcoPath = "Images\\WindowsIndexerImg.bmp" }); diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs index 84f81b1a95..863a717925 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -10,9 +10,12 @@ namespace Wox.Plugin.Indexer.SearchHelper public OleDbConnection conn; public OleDbCommand command; public OleDbDataReader WDSResults; + private readonly object _lock = new object(); + - public IEnumerable ExecuteQuery(ISearchQueryHelper queryHelper, string keyword) + public List ExecuteQuery(ISearchQueryHelper queryHelper, string keyword) { + List _Result = new List(); // Generate SQL from our parameters, converting the userQuery from AQS->WHERE clause string sqlQuery = queryHelper.GenerateSQLFromUserQuery(keyword); @@ -34,12 +37,14 @@ namespace Wox.Plugin.Indexer.SearchHelper while (WDSResults.Read() && WDSResults.GetValue(0) != DBNull.Value) { var result = new SearchResult { Path = WDSResults.GetString(0) }; - yield return result; + _Result.Add(result); } } } } } + + return _Result; } @@ -90,10 +95,12 @@ namespace Wox.Plugin.Indexer.SearchHelper [STAThread] public IEnumerable Search(string keyword, string pattern = "*", int maxCount = 100) { - ISearchQueryHelper queryHelper; - InitQueryHelper(out queryHelper, maxCount); - ModifyQueryHelper(ref queryHelper, pattern); - return ExecuteQuery(queryHelper, keyword); + lock(_lock){ + ISearchQueryHelper queryHelper; + InitQueryHelper(out queryHelper, maxCount); + ModifyQueryHelper(ref queryHelper, pattern); + return ExecuteQuery(queryHelper, keyword); + } } } }