22// Licensed under the MIT License. See the LICENSE file in the project root for details.
33using System ;
44using System . Collections . Generic ;
5- using System . Linq ;
65using System . Threading ;
76using System . Threading . Tasks ;
87using Microsoft . CommandPalette . Extensions ;
@@ -137,7 +136,17 @@ public override IListItem[] GetItems()
137136 {
138137 return _noResultsRefreshItem ;
139138 }
140- return _visibleItems . Concat ( _refreshSuggestionItem ) . ToArray ( ) ;
139+
140+ var combinedItems = new IListItem [ _visibleItems . Count + _refreshSuggestionItem . Length ] ;
141+ for ( int i = 0 ; i < _visibleItems . Count ; i ++ )
142+ {
143+ combinedItems [ i ] = _visibleItems [ i ] ;
144+ }
145+ for ( int i = 0 ; i < _refreshSuggestionItem . Length ; i ++ )
146+ {
147+ combinedItems [ _visibleItems . Count + i ] = _refreshSuggestionItem [ i ] ;
148+ }
149+ return combinedItems ;
141150 }
142151 }
143152 finally
@@ -159,7 +168,17 @@ public override void UpdateSearchText(string oldSearch, string newSearch)
159168 {
160169 _cachedFilteredWorkspaces = WorkspaceFilter . Filter ( newSearch , AllWorkspaces , _settingsManager . SearchBy , _settingsManager . SortBy ) ;
161170 _visibleItems . Clear ( ) ;
162- _visibleItems . AddRange ( CreateListItems ( _cachedFilteredWorkspaces . Take ( _settingsManager . PageSize ) ) ) ;
171+
172+ var itemsToAdd = new List < ListItem > ( ) ;
173+ int count = 0 ;
174+ foreach ( var workspace in _cachedFilteredWorkspaces )
175+ {
176+ if ( count >= _settingsManager . PageSize ) break ;
177+ itemsToAdd . Add ( WorkspaceItemFactory . Create ( workspace , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
178+ count ++ ;
179+ }
180+ _visibleItems . AddRange ( itemsToAdd ) ;
181+
163182 HasMoreItems = _cachedFilteredWorkspaces . Count > _settingsManager . PageSize ;
164183 }
165184
@@ -176,9 +195,24 @@ public override void LoadMore()
176195 lock ( _itemsLock )
177196 {
178197 var currentCount = _visibleItems . Count ;
179- var nextPage = _cachedFilteredWorkspaces
180- . Skip ( currentCount )
181- . Take ( _settingsManager . PageSize ) ;
198+
199+ var nextPage = new List < VisualStudioCodeWorkspace > ( ) ;
200+ int i = 0 ;
201+ foreach ( var workspace in _cachedFilteredWorkspaces )
202+ {
203+ if ( i >= currentCount )
204+ {
205+ if ( nextPage . Count < _settingsManager . PageSize )
206+ {
207+ nextPage . Add ( workspace ) ;
208+ }
209+ else
210+ {
211+ break ;
212+ }
213+ }
214+ i ++ ;
215+ }
182216
183217 _visibleItems . AddRange ( CreateListItems ( nextPage ) ) ;
184218 HasMoreItems = _visibleItems . Count < _cachedFilteredWorkspaces . Count ;
@@ -188,10 +222,14 @@ public override void LoadMore()
188222 RaiseItemsChanged ( _visibleItems . Count ) ;
189223 }
190224
191- private IEnumerable < ListItem > CreateListItems ( IEnumerable < VisualStudioCodeWorkspace > workspaces )
225+ private List < ListItem > CreateListItems ( IEnumerable < VisualStudioCodeWorkspace > workspaces )
192226 {
193- return workspaces . Select ( w =>
194- WorkspaceItemFactory . Create ( w , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
227+ var listItems = new List < ListItem > ( ) ;
228+ foreach ( var w in workspaces )
229+ {
230+ listItems . Add ( WorkspaceItemFactory . Create ( w , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
231+ }
232+ return listItems ;
195233 }
196234
197235 private async Task RefreshWorkspacesAsync ( bool isUserInitiated , bool isBackground = false )
@@ -297,7 +335,17 @@ private void UpdateWorkspaceList(List<VisualStudioCodeWorkspace> workspaces, Can
297335 var filtered = WorkspaceFilter . Filter ( SearchText , AllWorkspaces , _settingsManager . SearchBy , _settingsManager . SortBy ) ;
298336 _cachedFilteredWorkspaces = filtered ;
299337 _visibleItems . Clear ( ) ;
300- _visibleItems . AddRange ( CreateListItems ( filtered . Take ( _settingsManager . PageSize ) ) ) ;
338+
339+ var itemsToAdd = new List < ListItem > ( ) ;
340+ int count = 0 ;
341+ foreach ( var workspace in filtered )
342+ {
343+ if ( count >= _settingsManager . PageSize ) break ;
344+ itemsToAdd . Add ( WorkspaceItemFactory . Create ( workspace , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
345+ count ++ ;
346+ }
347+ _visibleItems . AddRange ( itemsToAdd ) ;
348+
301349 HasMoreItems = _cachedFilteredWorkspaces . Count > _settingsManager . PageSize ;
302350 }
303351
@@ -354,7 +402,17 @@ public void RefreshList()
354402 {
355403 _cachedFilteredWorkspaces = WorkspaceFilter . Filter ( SearchText , AllWorkspaces , _settingsManager . SearchBy , _settingsManager . SortBy ) ;
356404 _visibleItems . Clear ( ) ;
357- _visibleItems . AddRange ( CreateListItems ( _cachedFilteredWorkspaces . Take ( _settingsManager . PageSize ) ) ) ;
405+
406+ var itemsToAdd = new List < ListItem > ( ) ;
407+ int count = 0 ;
408+ foreach ( var workspace in _cachedFilteredWorkspaces )
409+ {
410+ if ( count >= _settingsManager . PageSize ) break ;
411+ itemsToAdd . Add ( WorkspaceItemFactory . Create ( workspace , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
412+ count ++ ;
413+ }
414+ _visibleItems . AddRange ( itemsToAdd ) ;
415+
358416 HasMoreItems = _cachedFilteredWorkspaces . Count > _settingsManager . PageSize ;
359417 }
360418 RaiseItemsChanged ( _visibleItems . Count ) ;
@@ -370,19 +428,35 @@ public async Task UpdateFrequencyAsync(string path)
370428
371429 lock ( _itemsLock )
372430 {
373- var itemToUpdate = AllWorkspaces . FirstOrDefault ( item => item ? . Path == path ) ;
374- if ( itemToUpdate != null )
431+ VisualStudioCodeWorkspace ? itemToUpdate = null ;
432+ foreach ( var item in AllWorkspaces )
375433 {
376- if ( itemToUpdate != null )
434+ if ( item ? . Path == path )
377435 {
378- itemToUpdate . Frequency ++ ;
379- itemToUpdate . LastAccessed = DateTime . Now ;
436+ itemToUpdate = item ;
437+ break ;
380438 }
439+ }
440+
441+ if ( itemToUpdate != null )
442+ {
443+ itemToUpdate . Frequency ++ ;
444+ itemToUpdate . LastAccessed = DateTime . Now ;
381445
382446 // Re-apply filter and sort
383447 _cachedFilteredWorkspaces = WorkspaceFilter . Filter ( SearchText , AllWorkspaces , _settingsManager . SearchBy , _settingsManager . SortBy ) ;
384448 _visibleItems . Clear ( ) ;
385- _visibleItems . AddRange ( CreateListItems ( _cachedFilteredWorkspaces . Take ( _settingsManager . PageSize ) ) ) ;
449+
450+ var itemsToAdd = new List < ListItem > ( ) ;
451+ int count = 0 ;
452+ foreach ( var workspace in _cachedFilteredWorkspaces )
453+ {
454+ if ( count >= _settingsManager . PageSize ) break ;
455+ itemsToAdd . Add ( WorkspaceItemFactory . Create ( workspace , this , _workspaceStorage , _settingsManager , _countTracker , _refreshWorkspacesCommandContextItem , _pinService ) ) ;
456+ count ++ ;
457+ }
458+ _visibleItems . AddRange ( itemsToAdd ) ;
459+
386460 HasMoreItems = _cachedFilteredWorkspaces . Count > _settingsManager . PageSize ;
387461 }
388462 }
0 commit comments