From 49687251d37f78d4b53a572e1bfd83a447bd0dc5 Mon Sep 17 00:00:00 2001 From: moooyo <42196638+moooyo@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:19:13 +0800 Subject: [PATCH] [cmdpal] Simplify time And Date extension code to make it easier to understand (#38075) Co-authored-by: Yu Leng (from Dev Box) --- .../Pages/TimeDateExtensionPage.cs | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/src/modules/cmdpal/Exts/Microsoft.CmdPal.Ext.TimeDate/Pages/TimeDateExtensionPage.cs b/src/modules/cmdpal/Exts/Microsoft.CmdPal.Ext.TimeDate/Pages/TimeDateExtensionPage.cs index bb5b58adb6..edcdb02e4b 100644 --- a/src/modules/cmdpal/Exts/Microsoft.CmdPal.Ext.TimeDate/Pages/TimeDateExtensionPage.cs +++ b/src/modules/cmdpal/Exts/Microsoft.CmdPal.Ext.TimeDate/Pages/TimeDateExtensionPage.cs @@ -4,6 +4,8 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.Threading; using Microsoft.CmdPal.Ext.TimeDate.Helpers; using Microsoft.CommandPalette.Extensions; using Microsoft.CommandPalette.Extensions.Toolkit; @@ -12,6 +14,12 @@ namespace Microsoft.CmdPal.Ext.TimeDate.Pages; internal sealed partial class TimeDateExtensionPage : DynamicListPage { + private readonly Lock _resultsLock = new(); + + private IList _results = new List(); + + private bool initialized; + private SettingsManager _settingsManager; public TimeDateExtensionPage(SettingsManager settingsManager) @@ -24,20 +32,36 @@ internal sealed partial class TimeDateExtensionPage : DynamicListPage _settingsManager = settingsManager; } - public override IListItem[] GetItems() => DoExecuteSearch(SearchText).ToArray(); + public override IListItem[] GetItems() + { + if (!initialized) + { + DoExecuteSearch(string.Empty); + } + + lock (_resultsLock) + { + ListItem[] results = _results.ToArray(); + return results; + } + } public override void UpdateSearchText(string oldSearch, string newSearch) { + if (newSearch == oldSearch) + { + return; + } + DoExecuteSearch(newSearch); - RaiseItemsChanged(0); } - private List DoExecuteSearch(string query) + private void DoExecuteSearch(string query) { try { var result = TimeDateCalculator.ExecuteSearch(_settingsManager, query); - return result; + UpdateResult(result); } catch (Exception) { @@ -51,7 +75,18 @@ internal sealed partial class TimeDateExtensionPage : DynamicListPage ResultHelper.CreateInvalidInputErrorResult(), }; - return items; + UpdateResult(items); } } + + private void UpdateResult(IList result) + { + lock (_resultsLock) + { + initialized = true; + this._results = result; + } + + RaiseItemsChanged(this._results.Count); + } }