Skip to content

Commit 37433fe

Browse files
committed
Add back propoerty load cancellation
1 parent af61580 commit 37433fe

File tree

5 files changed

+33
-0
lines changed

5 files changed

+33
-0
lines changed

Diff for: Files/ViewModels/ItemViewModel.cs

+17
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class ItemViewModel : ObservableObject, IDisposable
4646
{
4747
private readonly SemaphoreSlim enumFolderSemaphore;
4848
private readonly ConcurrentQueue<(uint Action, string FileName)> operationQueue;
49+
private readonly ConcurrentDictionary<string, bool> itemLoadQueue;
4950
private readonly AsyncManualResetEvent operationEvent, loadPropsEvent;
5051
private IntPtr hWatchDir;
5152
private IAsyncAction aWatcherAction;
@@ -344,6 +345,7 @@ public ItemViewModel(FolderSettingsViewModel folderSettingsViewModel)
344345
filesAndFolders = new List<ListedItem>();
345346
FilesAndFolders = new BulkConcurrentObservableCollection<ListedItem>();
346347
operationQueue = new ConcurrentQueue<(uint Action, string FileName)>();
348+
itemLoadQueue = new ConcurrentDictionary<string, bool>();
347349
addFilesCTS = new CancellationTokenSource();
348350
semaphoreCTS = new CancellationTokenSource();
349351
loadPropsCTS = new CancellationTokenSource();
@@ -452,6 +454,11 @@ public void CancelExtendedPropertiesLoading()
452454
loadPropsCTS = new CancellationTokenSource();
453455
}
454456

457+
public void CancelExtendedPropertiesLoadingForItem(ListedItem item)
458+
{
459+
itemLoadQueue.TryUpdate(item.ItemPath, true, false);
460+
}
461+
455462
public async Task ApplySingleFileChangeAsync(ListedItem item)
456463
{
457464
var newIndex = filesAndFolders.IndexOf(item);
@@ -900,13 +907,19 @@ public async Task LoadExtendedItemProperties(ListedItem item, uint thumbnailSize
900907
}
901908

902909
item.ItemPropertiesInitialized = true;
910+
itemLoadQueue[item.ItemPath] = false;
903911

904912
try
905913
{
906914
await Task.Run(async () =>
907915
{
908916
await loadPropsEvent.WaitAsync(loadPropsCTS.Token);
909917

918+
if (itemLoadQueue.TryGetValue(item.ItemPath, out var canceled) && canceled)
919+
{
920+
return;
921+
}
922+
910923
var wasSyncStatusLoaded = false;
911924
ImageSource groupImage = null;
912925
bool loadGroupHeaderInfo = false;
@@ -1032,6 +1045,10 @@ await FilesystemTasks.Wrap(() => CoreApplication.MainView.DispatcherQueue.Enqueu
10321045
{
10331046
// ignored
10341047
}
1048+
finally
1049+
{
1050+
itemLoadQueue.TryRemove(item.ItemPath, out _);
1051+
}
10351052
}
10361053

10371054
private async Task<ImageSource> GetItemTypeGroupIcon(ListedItem item, BaseStorageFile matchingStorageItem = null)

Diff for: Files/Views/LayoutModes/ColumnViewBase.xaml.cs

+4
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,10 @@ private void FileList_ContainerContentChanging(ListViewBase sender, ContainerCon
564564
{
565565
UninitializeDrag(args.ItemContainer);
566566
args.ItemContainer.PointerPressed -= FileListListItem_PointerPressed;
567+
if (args.Item is ListedItem item)
568+
{
569+
ParentShellPageInstance.FilesystemViewModel.CancelExtendedPropertiesLoadingForItem(item);
570+
}
567571
}
568572
}
569573

Diff for: Files/Views/LayoutModes/ColumnViewBrowser.xaml.cs

+4
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,10 @@ private void FileList_ContainerContentChanging(ListViewBase sender, ContainerCon
740740
{
741741
UninitializeDrag(args.ItemContainer);
742742
args.ItemContainer.PointerPressed -= FileListListItem_PointerPressed;
743+
if (args.Item is ListedItem item)
744+
{
745+
ParentShellPageInstance.FilesystemViewModel.CancelExtendedPropertiesLoadingForItem(item);
746+
}
743747
}
744748
}
745749

Diff for: Files/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs

+4
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,10 @@ private void FileList_ContainerContentChanging(ListViewBase sender, ContainerCon
698698
{
699699
UninitializeDrag(args.ItemContainer);
700700
args.ItemContainer.PointerPressed -= FileListGridItem_PointerPressed;
701+
if (args.Item is ListedItem item)
702+
{
703+
ParentShellPageInstance.FilesystemViewModel.CancelExtendedPropertiesLoadingForItem(item);
704+
}
701705
}
702706
}
703707

Diff for: Files/Views/LayoutModes/GridViewBrowser.xaml.cs

+4
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ private void FileList_ContainerContentChanging(ListViewBase sender, ContainerCon
587587
{
588588
UninitializeDrag(args.ItemContainer);
589589
args.ItemContainer.PointerPressed -= FileListGridItem_PointerPressed;
590+
if (args.Item is ListedItem item)
591+
{
592+
ParentShellPageInstance.FilesystemViewModel.CancelExtendedPropertiesLoadingForItem(item);
593+
}
590594
}
591595
}
592596
}

0 commit comments

Comments
 (0)